我有两个项目有同样的问题,但不清楚为什么npm解决它们不同:
- 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.
- 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(覆盖对等依赖)解决
第一个例子有两个条件不能同时为真:slonik@31.4.2
和slonik@"27 - 29"
。没有两个包都可以使用的slonik
版本,而且npm不能用同一个包的两个不同版本来构建依赖树。它具有解析为满足所有需求的一个版本,如果不能做到这一点,那么它将失败并抛出错误。因为slonik@"27 - 29"
指定了它接受的版本的上限,npm假设版本30+是已知不能工作的,而不仅仅是不知道不能工作。
第二个例子有两个需求(令人困惑)也不一致:rxjs@"^7.0.0"
和rxjs@"^6.0.0"
。插入符号表示允许使用任何次要版本或有错误修复的版本,但不允许使用新的主要版本——因此一个要求是版本7.x。另一个用于版本6.x.y。但是,由于第二个依赖项没有设置上限,所以npm会尝试解决这个问题,并使用更高的版本号。这可能会导致错误,这就是为什么会有警告,但不能保证会破坏。
你可以在这里阅读更多关于npm和语义版本控制的内容。
由于第一个示例有一个来自项目根的依赖项,您可以简单地将您正在使用的slonik
版本更改为^29.0.0
,或者(最好)寻找使用slonik
最新版本的@slonik/migrator
的最新版本。