你们有没有过原本好好的项目工程,切换了node版本或者改了一些不相关的配置,然后它就出异常了,虽然也没改什么,总觉的是切到大动脉。最近公司一个老项目突然打包失败了,项目执行:pnpm build:test,然后就报错,从提示看是找不到Collector.js.js。
当然很明显,文件名肯定是错误的。
less
Error: Cannot find module 'E:\gwm-voice-op-mgr-fe-发布\node_modules\.pnpm\vite-plugin-dts@3.1.0_@types+node@20.5.1_less@4.1.3_sass@1.63.6_typescript@5.9.3\node_modules\@microsoft\api-extractor\lib-commonjs\collector\Collector.js.js'
at createEsmNotFoundErr (node:internal/modules/cjs/loader:1244:15)
at finalizeEsmResolution (node:internal/modules/cjs/loader:1232:15)
at resolveExports (node:internal/modules/cjs/loader:638:14)
at Module._findPath (node:internal/modules/cjs/loader:711:31)
at Module._resolveFilename (node:internal/modules/cjs/loader:1193:27)
at Function.resolve (node:internal/modules/helpers:193:19)
at _resolve (E:\gwm-voice-op-mgr-fe-发布\node_modules\.pnpm\jiti@1.21.7\node_modules\jiti\dist\jiti.js:1:246378)
at jiti (E:\gwm-voice-op-mgr-fe-发布\node_modules\.pnpm\jiti@1.21.7\node_modules\jiti\dist\jiti.js:1:249092)
at E:/gwm-voice-op-mgr-fe-发布/node_modules/.pnpm/vite-plugin-dts@3.1.0_@types+node@20.5.1_less@4.1.3_sass@1.63.6_typescript@5.9.3/node_modules/vite-plugin-dts/dist/index.cjs:14:22
at evalModule (E:\gwm-voice-op-mgr-fe-发布\node_modules\.pnpm\jiti@1.21.7\node_modules\jiti\dist\jiti.js:1:251913)
at jiti (E:\gwm-voice-op-mgr-fe-发布\node_modules\.pnpm\jiti@1.21.7\node_modules\jiti\dist\jiti.js:1:249841)
at E:/gwm-voice-op-mgr-fe-发布/internal/vite-config/src/config/package.ts:3:45
at evalModule (E:\gwm-voice-op-mgr-fe-发布\node_modules\.pnpm\jiti@1.21.7\node_modules\jiti\dist\jiti.js:1:251913)
at jiti (E:\gwm-voice-op-mgr-fe-发布\node_modules\.pnpm\jiti@1.21.7\node_modules\jiti\dist\jiti.js:1:249841)
at E:/gwm-voice-op-mgr-fe-发布/internal/vite-config/src/index.ts:2:16
at evalModule (E:\gwm-voice-op-mgr-fe-发布\node_modules\.pnpm\jiti@1.21.7\node_modules\jiti\dist\jiti.js:1:251913)
ELIFECYCLE Command failed with exit code 1.
这是一个 monorepo 项目,上面的错误指向的是 pnpm 依赖问题,错误显示 vite-plugin-dts 在尝试加载 @microsoft/api-extractor 的模块时找不到文件。
问题定位:
- internal/vite-config 包是存在测 : pnpm-workspace.yaml 配置了 internal/* 作为 workspace 包,但该文件名是 Collector.js.js (多了一个 .js )
- node_modules 中存在残留缓存 :旧的构建产物引用了已删除的 vite-plugin-dts 依赖
错误路径中的版本是 typescript@5.9.3 ,但实际安装的是 typescript@5.1.6 。是典型的版本依赖问题。
lock.yaml 中存在两个 typescript 版本:
- typescript@5.1.6 - 被 vite-plugin-dts 使用
- typescript@5.9.3 - 被 cosmiconfig-typescript-loader 使用
错误原因是:
这是一个 pnpm + jiti + vite-plugin-dts 的兼容性问题:Collector.js 文件存在,但 jiti 错误地查找 Collector.js.js 。这是 vite-plugin-dts@3.1.0 与 jiti 的兼容性问题。
- vite-plugin-dts 使用 jiti 动态加载 @microsoft/api-extractor
- 错误路径 Collector.js.js (多了一个 .js )表明模块解析出错
- pnpm 的严格依赖结构导致路径解析混乱
解决方案 :
这是 vite-plugin-dts@3.1.0 的已知 bug。解决方案是升级到修复版本:

操作:
- internal/vite-config/package.json - 升级 vite-plugin-dts 到 ^3.2.0
- package.json - 添加 pnpm.overrides 固定 @microsoft/api-extractor 版本
- 清理node_modules并重新安装依赖