报错信息:
Vite 找不到
@vue-office/docx这个包
用 pnpm 安装 @vue-office 相关包时遇到的"幽灵依赖"问题,是 pnpm 10 默认阻止了 @vue-office 的 postinstall 脚本执行,导致入口文件缺失。
核心原因在于:@vue-office 系列包依赖 postinstall 脚本,根据你项目里的 Vue 版本(2 或 3)动态生成 index.js 和 index.css。pnpm 10 出于安全考虑,默认不再运行依赖包的构建脚本,所以这些文件没被生成,构建工具自然就找不到入口了。
你可以按以下顺序解决:
🛠️ 解决方案一:使用 pnpm approve-builds(推荐)
这是最直接的方式。在项目根目录运行:
pnpm approve-builds
在交互提示中,选中 @vue-office/docx(以及你安装的其他 @vue-office 包,如 excel、pdf)和 vue-demi,允许它们执行构建脚本。批准后,pnpm 会重新运行这些包的 postinstall,生成所需的 lib/index.js 和 lib/index.css。
🛠️ 解决方案二:手动配置白名单
如果 approve-builds 不方便(比如在 CI 环境),可以直接在 package.json 中配置:
{ "pnpm": { "onlyBuiltDependencies": [ "@vue-office/docx", "@vue-office/excel", "@vue-office/pdf", "@vue-office/pptx", "vue-demi" ] } }
然后重新运行 pnpm install,或者执行 pnpm rebuild @vue-office/docx @vue-office/excel @vue-office/pdf @vue-office/pptx 来触发构建。
🛠️ 解决方案三:升级pnpm,配置pnpm-workspace.yaml
卸载pnpm
npm rm -g pnpm#安装pnpm为V12
pnpm 12 目前并未通过常规的
latest标签发布 ,因此不能直接用npm install -g pnpm
使用:npm install -g pnpm@next-12
配置pnpm-workspace.yaml
allowBuilds:
'@vue-office/docx': true
'@vue-office/excel': true
'@vue-office/pdf': true
'@vue-office/pptx': true
此方法一劳永逸。删除pnpm-lock.yaml文件,重新编译pnpm i
🔍 排查其他可能
如果以上步骤仍不生效,检查一下项目里是否主动禁止了脚本执行:
-
检查
.npmrc:确认没有enable-pre-post-scripts=false。如果有,改成true或删除该行。 -
检查
ignoredBuiltDependencies:在package.json中查找这个字段,如果里面包含@vue-office相关的包,把它们移除。
⚠️ "幽灵依赖"的澄清
pnpm 的默认机制正是为了治理幽灵依赖 ------它不会把传递依赖提升到根目录,项目代码只能访问 package.json 里显式声明的依赖。所以如果你在代码里 import 了 @vue-office 的子依赖(比如直接引用它的某个内部工具),那确实是需要显式安装的"真"幽灵依赖;但 @vue-office 本身的入口文件丢失,属于上面说的构建脚本被拦截问题。