报错信息:
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本身的入口文件丢失,属于上面说的构建脚本被拦截问题。