如何为指定依赖关闭npm包自动去重功能?
解决方案
优先使用npm(v8及以上版本)实现
直接在项目根目录的package.json中添加overrides配置,强制指定bbb依赖的ccc版本固定为1.0.0即可,配置示例:
{ "name": "你的项目名", "dependencies": { "aaa": "^4.0", "ddd": "^0.8", "eee": "^4.3" }, "overrides": { "aaa": { "bbb": { "ccc": "1.0.0" } } } }
配置完成后删除原来的node_modules和package-lock.json,重新执行npm install即可。此时npm会:
- 在
bbb的node_modules目录下单独安装ccc@1.0.0,供bbb专用,不会被全局去重 - 根目录
node_modules下保留ccc@1.0.1供ddd使用 eee依然按照默认规则去重,全局仅保留一个兼容版本
如果你的npm版本低于v8,无法使用overrides字段,更推荐直接升级npm版本,无需使用兼容性工具额外处理。
备选工具方案
Yarn(v2及以上版本)
在项目根目录的.yarnrc.yml中添加配置,限制aaa的所有依赖不被提升,即可实现仅关闭aaa及其子依赖的去重逻辑:
nmHoistingLimits: ["aaa"]
配置完成后重新执行yarn install即可,eee的去重逻辑不受影响。
pnpm
在项目根目录的.npmrc中添加配置,排除aaa及其子依赖的全局提升:
hoist-pattern[]=!aaa>**
重新执行pnpm install即可,除aaa下的依赖外,其余包的去重逻辑保持不变。
注意事项
如果使用了Webpack等打包工具,需要确认打包配置不会强制合并所有相同名称的依赖,避免嵌套安装的ccc@1.0.0被打包工具错误替换。
内容的提问来源于stack exchange,提问作者Bart van Heukelom
相关产品推荐
相关产品推荐

