项目升级 node@16 报错(npm 由原来的 6 升级到现在的 8)

  1. npm ERR! code ERESOLVE
  2. npm ERR! ERESOLVE unable to resolve dependency tree
  3. npm ERR!
  4. npm ERR! While resolving: xx@1.0.0
  5. npm ERR! Found: @xxx/a1@1.1.41
  6. npm ERR! node_modules/@xxx/a1
  7. npm ERR! @xxx/a1@"1.1.41" from the root project
  8. npm ERR!
  9. npm ERR! Could not resolve dependency:
  10. npm ERR! peer @xxx/a1@"0.0.44" from @xxx/b1@0.0.17
  11. npm ERR! node_modules/@xxx/b1
  12. npm ERR! @xxx/b1@"0.0.17" from the root project
  13. npm ERR!
  14. npm ERR! Fix the upstream dependency conflict, or retry
  15. npm ERR! this command with --force, or --legacy-peer-deps
  16. npm ERR! to accept an incorrect (and potentially broken) dependency resolution.

主要原因是从 npm@7 开始对 peerDependencies 的依赖冲突处理机制不一样了。
可以使用 npm i --legacy-peer-deps解决此问题

以下是 npm@7 升级涉及的变更内容

Peer dependencies

Automatically installing peer dependencies is an exciting new feature introduced in npm 7. In previous versions of npm (4-6), peer dependencies conflicts presented a warning that versions were not compatible, but would still install dependencies without an error. npm 7 will block installations if an upstream dependency conflict is present that cannot be automatically resolved. You have the option to retry with —force to bypass the conflict or —legacy-peer-deps command to ignore peer dependencies entirely (this behavior is similar to versions 4-6).

大意如下

对等依赖

自动安装对等依赖项是 npm 7 中引入的一项令人兴奋的新功能。在以前的 npm 版本(4-6)中,对等依赖项冲突会显示版本不兼容的警告,但仍会安装依赖项而不会出错。如果存在无法自动解决的上游依赖冲突,npm 7 将阻止安装。
您可以选择重试—force以绕过冲突或—legacy-peer-deps完全忽略对等依赖项的命令(此行为类似于版本 4-6)。
由于生态系统中的许多包已经开始依赖松散的对等依赖解决方案,npm 7 将打印警告并解决存在于包树深处的大多数对等冲突,因为无论如何您都无法解决这些问题。要在所有级别强制执行严格正确的对等依赖解决方案,请使用该—strict-peer-deps标志。

  • peerDependency 可以避免类似的核心依赖库被重复下载的问题
  • —legacy-peer-deps 标志是在v7中引入的,目的是绕过peerDependency自动安装;它告诉 NPM 忽略项目中引入的各个modules之间的相同modules但不同版本的问题并继续安装,保证各个引入的依赖之间对自身所使用的不同版本modules共存。

参考: