如何解决 npm 中不同版本的传递依赖?
Posted
技术标签:
【中文标题】如何解决 npm 中不同版本的传递依赖?【英文标题】:How to resolve the transitive dependencies of different versions in npm? 【发布时间】:2021-11-14 06:06:43 【问题描述】:我的应用程序依赖于 npm 包 ajv-keywords
和 @apideck/better-ajv-errors
,它们又依赖于包 ajv
,但版本不同,如下面的错误所示。
npm ERR! peer dep missing: ajv@^6.9.1, required by ajv-keywords@3.5.2
npm ERR! peer dep missing: ajv@>=8, required by @apideck/better-ajv-errors@0.2.5
我尝试过的解决方案没有效果 -
安装并执行npm-install-peers
https://***.com/a/56495651/16958085 中提到的解决方案
下图显示了两个包的加载方式-
> npm ls @apideck/better-ajv-errors@0.2.5
`-- my-app@0.1.8
`-- react-scripts@5.0.0-next.37
`-- workbox-webpack-plugin@6.2.4
`-- workbox-build@6.2.4
`-- @apideck/better-ajv-errors@0.2.5
> npm ls ajv-keywords@3.5.2
+-- babel-loader@8.2.2
| `-- schema-utils@2.7.1
| `-- ajv-keywords@3.5.2
+-- my-app@0.1.8
| `-- react-scripts@5.0.0-next.37
| `-- react-dev-utils@12.0.0-next.37
| `-- fork-ts-checker-webpack-plugin@6.0.5
| `-- schema-utils@2.7.0
| `-- ajv-keywords@3.5.2 deduped
`-- webpack@5.53.0
`-- schema-utils@3.1.1
`-- ajv-keywords@3.5.2 deduped
请提出一个合适的解决方案来满足这两个依赖项。
【问题讨论】:
你试过在你的npm依赖文件中添加两个版本的ajv npm 不允许我们在 package.json 中添加同一个包的两个版本 【参考方案1】:这从来都不是一个有趣的情况,也不能说 npm 和 yarn 都曾经完全/干净地解决了这个问题。
通常,您会被困在等待您的依赖项取消固定或升级其版本...
也就是说,不确定您是否有特定要求使用旧版本的 ajv-keywords,但最新的ajv-keywords uses ajv v8。
用
更新你的 package.json"ajv-keywords": "^5.0.0"
然后重新运行 npm install 应该可以到达那里。
如有疑问,请务必查看他们的readme,以确认更新不会对您造成任何意外更改。
【讨论】:
以上是关于如何解决 npm 中不同版本的传递依赖?的主要内容,如果未能解决你的问题,请参考以下文章