如何解决npm中不同版本传递依赖冲突?以ajv多版本依赖问题为例
解决方案
你之前尝试的npm-install-peers仅能自动安装缺失的对等依赖,无法处理版本区间冲突的场景,因此不生效,可选择以下任意一种方案解决:
方案1:使用npm overrides强制安装双版本ajv
npm 8.3及以上版本原生支持overrides配置,可让两个依赖各自加载符合版本要求的ajv实例,互不影响,无需调整现有依赖的主版本:
- 在项目根目录的
package.json中添加如下配置:
{ "overrides": { "@apideck/better-ajv-errors": { "ajv": "^8.0.0" }, "ajv-keywords@3.5.2": { "ajv": "^6.9.1" } } }
- 删除本地的
node_modules文件夹和package-lock.json锁文件 - 执行
npm install重新安装所有依赖即可。
方案2:统一升级ajv-keywords兼容ajv@8
ajv-keywords从4.0.1版本开始已原生支持ajv@8,强制将项目中所有ajv-keywords升级到4.x版本可彻底消除版本冲突:
- 在项目根目录的
package.json中添加如下配置:
{ "overrides": { "ajv-keywords": "^4.0.1" } }
- 删除
node_modules和package-lock.json后重新执行npm install即可。
如果使用yarn作为包管理器,将上述配置中的overrides字段替换为resolutions即可生效。
内容的提问来源于stack exchange,提问作者Mohtashim Shaikh
相关产品推荐
相关产品推荐

