【发布时间】:2021-07-15 01:12:29
【问题描述】:
我正在尝试升级我拥有的项目的一些 npm 依赖项,但出现“冲突对等依赖项”错误。
我在这个网站上看到很多问题,要求帮助解决此类错误。但是,我一直在努力寻找有关这些错误的实际含义的信息。我觉得如果我理解了这一点,我就有很大的机会自己想办法解决这个问题。
这是我试图解释的错误消息:
npm ERR! code ERESOLVE
npm ERR! ERESOLVE unable to resolve dependency tree
npm ERR!
npm ERR! Found: @angular-devkit/build-angular@0.1102.5
npm ERR! node_modules/@angular-devkit/build-angular
npm ERR! dev @angular-devkit/build-angular@"~0.1102.9" from the root project
npm ERR!
npm ERR! Could not resolve dependency:
npm ERR! dev @angular-devkit/build-angular@"~0.1102.9" from the root project
npm ERR!
npm ERR! Conflicting peer dependency: @angular/localize@11.2.10
npm ERR! node_modules/@angular/localize
npm ERR! peerOptional @angular/localize@"^11.0.0 || ^11.2.0-next" from @angular-devkit/build-angular@0.1102.9
npm ERR! node_modules/@angular-devkit/build-angular
npm ERR! dev @angular-devkit/build-angular@"~0.1102.9" from the root project
npm ERR!
npm ERR! Fix the upstream dependency conflict, or retry
npm ERR! this command with --force, or --legacy-peer-deps
npm ERR! to accept an incorrect (and potentially broken) dependency resolution.
这可以通过在this Github branch 的根目录中运行npm install 来重现(我使用的是npm 7.10.0。)
我对“冲突对等依赖项”错误的一般理解是,我所依赖的某个包在包版本规范上表达了 peer dependency,而该包版本规范与我实际安装的该包的版本不匹配。
例如,如果我的项目直接依赖于包A 和B,并且我安装了A 的12.0.0 版本,但我的B 版本对^11.0.0 有对等依赖包A,然后我会得到一个冲突的对等依赖错误,因为我正在使用B和一个可能不兼容的A版本。
因此,我对该错误消息可能意味着什么的最佳猜测是,我所依赖的某些包对 @angular/localize 版本规范 ^11.0.0 || ^11.2.0-next 具有对等依赖,但此规范与 @angular/localize 的版本不匹配我已安装。
当我查看my package-lock.json 时,我确实看到node_modules/@angular-devkit/build-angular 条目在其peerDependencies 中有一个"@angular/localize": "^11.0.0 || ^11.2.0-next" 条目。
但是,这是该文件中唯一提及@angular/localize 的地方——或者实际上是在package.json 中。我没有明确要求安装它。此外,在node_modules/@angular-devkit/build-angular的peerDependenciesMeta中标记为"optional": true。所以看到一个与之相关的错误信息是令人惊讶的。
错误提到特定冲突的对等依赖项是@angular/localize@11.2.10。我看不出那个版本号是从哪里来的。但无论如何,它实际上似乎与下面的依赖规范相匹配:如果我转到 semver.npmjs.com 并输入 @angular/localize 作为包和 ^11.0.0 || ^11.2.0-next 作为版本范围,我会看到包的版本 11.2.10 以绿色突出显示,表示匹配范围。
因此,我非常感谢能帮助我详细了解此错误消息告诉我的内容。我不知道为什么npm 试图安装11.2.10 的@angular/localize,或者为什么它认为这与@angular-devkit/build-angular 的对等依赖规范冲突。感觉我可能完全误解了这条信息。
我猜这归结为某些 Angular 包的最新发布版本之间的某种不兼容。如果有人对如何修复此特定错误有任何指示,那就太好了 - 但我更感兴趣的是简单地了解错误消息告诉我的内容,所以我可以自己解决。
非常感谢!
【问题讨论】:
标签: npm