npm 9未复制本地依赖的.js文件,如何恢复原有行为?
问题解答
这是npm 9的新特性,不是Bug。npm 9调整了file:协议依赖的文件复制逻辑:此前npm会完整复制依赖目录的所有内容(除了被.gitignore排除的),但npm 9开始严格遵循package.json的files字段声明;若未配置files字段,则仅复制npm认定的「核心」文件(如package.json、README、LICENSE等),同时会参考.gitignore的排除规则——这就导致你的Shared项目构建出的.js文件没被复制到node_modules中。
要恢复原有工作方式,有两种可靠方案:
- 方案一:配置Shared项目的
files字段
在Shared的package.json里明确列出需要被依赖项目引用的所有文件,假设你的Shared构建产物在dist目录,可这样配置:
这种方式最规范,能精准控制哪些文件会被复制到依赖项目的node_modules中。{ "files": [ "dist/**/*.js", "dist/**/*.d.ts", "dist/**/*.js.map" ] } - 方案二:使用
.npmignore反向排除文件
若不想配置files字段,可在Shared项目根目录创建.npmignore文件,覆盖.gitignore的规则,确保.js文件不会被排除。示例如下:# 取消对dist目录的排除(如果.gitignore里排除了dist) !dist/ # 保留dist下的所有目标文件 !dist/**/*.js !dist/**/*.d.ts !dist/**/*.js.map
调整完成后重新执行npm install,node_modules里的Shared副本就会包含完整的构建文件了。
内容的提问来源于stack exchange,提问作者Rus
相关产品推荐
相关产品推荐

