npm或yarn如何处理依赖包自身所依赖的不同版本依赖?
npm/yarn 跨包依赖版本冲突处理规则
你举的场景(根项目直接依赖A@1.0.0,子依赖B依赖A@0.9.0)下,两个版本的A包会被同时安装,具体规则如下:
安装位置规则
- 根目录
node_modules下存放的是你在package.json中直接声明的A@1.0.0,所有和该版本语义化兼容的子依赖都会复用这个版本 - B包自身的目录下会生成独立的
node_modules文件夹,里面存放A@0.9.0,只有B包内部导入A的时候,会优先调用自己目录下的这个版本
不会同时安装的场景
如果两个依赖的A包版本满足语义化兼容规则,就只会安装一个适配所有需求的最高兼容版本,不会重复安装:
比如根项目依赖A@1.0.0,B依赖的是A@^1.0.0(允许1.x.x的所有版本),此时包管理器会判定1.0.0满足两方需求,只会在根node_modules下装一次A@1.0.0。
手动强制统一版本的方法
如果你不想让两个版本的A同时存在,可以通过配置强制所有包使用指定版本的A:
- yarn 可以在
package.json中添加resolutions字段:
{ "resolutions": { "A": "1.0.0" } }
- npm 可以在
package.json中添加overrides字段:
{ "overrides": { "A": "1.0.0" } }
配置完成后重新执行安装命令即可。
内容的提问来源于stack exchange,提问作者promet99
相关产品推荐
相关产品推荐

