npm resolution error
2023-01-12 · 538 chars · 3 min read
直说问题,昨天遇到一个 npm 安装失败的问题,报错信息如下:
npm ERR! code ERESOLVE npm ERR! ERESOLVE could not resolve npm ERR! npm ERR! While resolving: @scope/[email protected] npm ERR! Found: [email protected] npm ERR! node_modules/react-router npm ERR! react-router@"5.2.1" from [email protected] npm ERR! node_modules/react-router-dom npm ERR! react-router-dom@"^5.0.0" from the root project npm ERR! peer react-router-dom@"^5.2.0" from @scope/[email protected] npm ERR! node_modules/@scope/yyy npm ERR! @scope/yyy@"3.0.9-alpha.0" from the root project npm ERR! 2 more (@scope/zzz, @scope/zzz) npm ERR! npm ERR! Could not resolve dependency: npm ERR! peer react-router@"^4.3.1" from @scope/[email protected] npm ERR! node_modules/@scope/xxx npm ERR! @scope/xxx@"^2.0.0" from the root project npm ERR! npm ERR! Conflicting peer dependency: [email protected] npm ERR! node_modules/react-router npm ERR! peer react-router@"^4.3.1" from @scope/[email protected] npm ERR! node_modules/@scope/xxx npm ERR! @scope/xxx@"^2.0.0" 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 ERR! npm ERR! See /Users/keenwon/.npm/eresolve-report.txt for a full report. npm ERR! A complete log of this run can be found in: npm ERR! /Users/keenwon/.npm/_logs/2023-01-12T03_35_12_275Z-debug-0.log
这个项目别的同事运行是没有问题的,我运行就报错,后来发现是我使用了 node 16 + npm 8,而其他同事用的是 node 14 + npm 6。
问题的核心是:「多个包有相同的 peerDependencies
,但是版本不一致」,这个在 npm 6 里都可以正常使用,但是比较新的 npm 会视为异常,导致安装失败。
解决方案其实在报错信息中已经有了,使用 --force
或者 --legacy-peer-deps
。或者更直接的方案是检查相关包的 peerDependencies
是否准确。实在不行也可以考虑切回 node 14。
这不是什么大问题,遇到就随手记录下。
最后想说的是,其实目前主要使用的开源包质量还都比较高,一般不会出现这种依赖混乱的情况,Changelog 也都很清晰。我遇到的出问题的包都是内部的私有包,缺少必要的维护,质量参差不齐。外加项目多如牛毛,升级版本都是本着「能跑就行」的态度,并不会统一协调,按计划整体升级。所以多版本并存,和类似的混乱情况,其实才是企业化开发的常态?也许「可维护」才是「降本增效」该解决的问题?