ERESOLVE unable to resolve dependency tree

我们在有些项目中进行 npm install 操作时,会遇到报 ERESOLVE unable to resolve dependency tree 错误的情况:

$ npm install
...
$ npm ERR! code ERESOLVE
$ npm ERR! ERESOLVE unable to resolve dependency tree

这是由于高版本 npm(>= v7) 遇到对等依赖(peerDependencies)冲突时,会引发失败终止安装过程,并抛出上面的错误。 这时候,我们除了可以试着盘查项目依赖精心指定引发 对等依赖冲突相关包的版本号 来解决问题, 还可以偷懒为安装命令加上 --legacy-peer-deps 参数来尝试解决问题:

$ npm install --legacy-peer-deps

该参数告诉 npm 在遇到这种对等依赖冲突时,以 legacy(npm v4 ~ v6) 模式运行忽略所有对等依赖,你项目本地有什么版本就用什么版本。 一般情况下这能让 npm install 过程顺利完成并让项目跑起来,但也只是刚好能跑起来 - 如前面所说 --legacy-peer-deps 参数只是忽略所有对等依赖,相关依赖包或者你用到的功能是否真的能正常工作还需要观察。

--legacy-peer-deps 还有一个 --force 参数,它将强制 npm 忽略相关依赖的本地副本改从远程获取并放在依赖树中。 对一些小工具包的依赖使用该参数可能是个更好的选择,但对于像 Vue, React 这样的全局包要谨慎处理。