npm peer dependency resolution conditions WARN vs ERR

zysjyyx4  于 2023-04-12  发布在  其他
关注(0)|答案(1)|浏览(162)

我有两个项目有同样的问题,但不清楚为什么npm解决它们的方式不同:

  1. https://github.com/Sairyss/domain-driven-hexagon
npm ERR! code ERESOLVE
npm ERR! ERESOLVE unable to resolve dependency tree
npm ERR!
npm ERR! While resolving: domain-driven-hexagon@2.0.0
npm ERR! Found: slonik@31.4.2
npm ERR! node_modules/slonik
npm ERR!   slonik@"^31.2.4" from the root project
npm ERR!
npm ERR! Could not resolve dependency:
npm ERR! peer slonik@"27 - 29" from @slonik/migrator@0.11.3
npm ERR! node_modules/@slonik/migrator
npm ERR!   @slonik/migrator@"^0.11.3" 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.
  1. https://github.com/ddd-by-examples/library-nestjs
npm WARN ERESOLVE overriding peer dependency
npm WARN While resolving: rxjs-for-await@0.0.2
npm WARN Found: rxjs@7.4.0
npm WARN node_modules/rxjs
npm WARN   rxjs@"^7.0.0" from the root project
npm WARN   5 more (@nestjs/common, @nestjs/config, @nestjs/core, ...)
npm WARN
npm WARN Could not resolve dependency:
npm WARN peer rxjs@"^6.0.0" from rxjs-for-await@0.0.2
npm WARN node_modules/rxjs-for-await
npm WARN   rxjs-for-await@"0.0.2" from @nrwl/node@13.2.2
npm WARN   node_modules/@nrwl/node
npm WARN   1 more (@nrwl/tao)
npm WARN
npm WARN Conflicting peer dependency: rxjs@6.6.7
npm WARN node_modules/rxjs
npm WARN   peer rxjs@"^6.0.0" from rxjs-for-await@0.0.2
npm WARN   node_modules/rxjs-for-await
npm WARN     rxjs-for-await@"0.0.2" from @nrwl/node@13.2.2
npm WARN     node_modules/@nrwl/node
npm WARN     1 more (@nrwl/tao)

这两个项目都与根项目依赖性有冲突的对等依赖性,但第一个项目使用ERR(无法解决依赖性树)解决,第二个项目使用WARN(覆盖对等依赖性)解决

cngwdvgl

cngwdvgl1#

第一个例子有两个不能同时为真的要求:slonik@31.4.2slonik@"27 - 29"slonik没有两个包都可以使用的版本,并且npm无法构建同一个包的两个不同版本的依赖关系树。它必须解析为满足所有要求的一个版本,如果无法做到这一点,* 因为slonik@"27 - 29"指定了它接受的版本的上限,npm假设版本30+是已知不工作的,而不是仅仅是不知道工作的。
第二个例子有两个要求(令人困惑)也不一致:rxjs@"^7.0.0"rxjs@"^6.0.0"。插入符号表示允许任何次要版本或错误修复版本,但不允许新的主要版本-因此一个要求是版本7.x.y,另一个是版本6.x.y。然而,由于第二个依赖项没有设置上限,npm无论如何都会尝试解决这个问题,并使用更高的版本号。这可能会导致错误,这就是为什么会有一个警告,但不能保证它会坏掉
您可以阅读更多关于npm和语义版本控制here的信息。
由于第一个示例依赖于项目的根目录,因此您可以简单地将正在使用的slonik版本更改为^29.0.0,或者(最好)查找使用slonik最新版本的@slonik/migrator

相关问题