我如何阅读npm“冲突的对等依赖”错误消息?
我正在尝试升级我拥有的项目的一些 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.
这可以通过npm install在此 Github 分支的根目录中运行来重现(我正在使用 npm 7.10.0。)
我对“冲突的对等依赖项”错误的一般理解是,我依赖的某些包表达了对包版本规范的对等依赖关系,该规范与我实际安装的该包的版本不匹配。
例如,如果我的项目有直接依赖于封装A和B,和我有版本12.0.0的A安装,但我的版本B有一个同行的依赖^11.0.0包A,然后我会得到一个冲突的同行产生错误信息,因为我使用B一个版本的A它可能不兼容。
因此,对于此错误消息可能意味着什么,我最好的猜测是我依赖的某些包对@angular/localize版本 spec具有对等依赖性^11.0.0 || ^11.2.0-next,但此规范与@angular/localize我安装的版本不匹配。
当我查看我的 package-lock.json 时,我确实看到该node_modules/@angular-devkit/build-angular条目"@angular/localize": "^11.0.0 || ^11.2.0-next"在其peerDependencies.
然而,这是唯一提到的 @angular/localize该文件中任何地方——或者实际上是在package.json 中。我没有明确要求安装它。此外,它被标记为"optional": true在peerDependenciesMeta中node_modules/@angular-devkit/build-angular。所以看到与它相关的错误消息是令人惊讶的。
该错误提到特定的冲突对等依赖项是 @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 软件包的最新发布版本之间存在某种不兼容。如果有人对如何修复此特定错误有任何指示,那就太好了——但我对简单地了解错误消息告诉我的内容更感兴趣,因此我可以自己解决。
提前谢谢了!