安装React实验版本后npm ERESOLVE报错,如何适配peer依赖?
我安装了react@experimental,实际获取的版本为0.0.0-experimental-ee8509801-20230117。项目中使用的react-jvectormap@0.0.16库设置了peer依赖要求react-dom >=0.14,运行npm i时触发ERESOLVE解析错误,报错信息如下:
npm ERR! code ERESOLVE
npm ERR! ERESOLVE could not resolve
npm ERR!
npm ERR! While resolving: react-jvectormap@0.0.16
npm ERR! Found: react-dom@0.0.0-experimental-ee8509801-20230117
npm ERR! node_modules/react-dom
npm ERR! react-dom@"^0.0.0-experimental-ee8509801-20230117" from the root project
npm ERR!
npm ERR! Could not resolve dependency:
npm ERR! peer react-dom@">=0.14" from react-jvectormap@0.0.16
npm ERR! node_modules/react-jvectormap
npm ERR! react-jvectormap@"0.0.16" from the root project
已尝试在.npmrc中配置overrides和legacy-peer-deps=true,但问题仍未解决。当前Node版本为v16.19.0,npm版本为8.19.3。请问是否有方法让npm识别该React版本满足peer依赖要求?
以下几种方法可尝试解决该peer依赖解析问题:
配置
package.json的peerDependencyRules
在项目根目录的package.json中添加如下配置,强制npm认定当前experimental版本符合依赖要求:{ "peerDependencyRules": { "allowedVersions": { "react-dom": ">=0.14" } } }该配置会直接忽略版本匹配冲突,告知npm当前
react-dom版本满足>=0.14的peer依赖条件。精准配置
overrides字段
若之前的overrides配置无效,可尝试强制react-jvectormap使用项目根依赖的react-dom版本:{ "overrides": { "react-jvectormap": { "react-dom": "$react-dom" } } }这里的
$react-dom会直接引用项目中已安装的react-dom版本,绕过版本校验逻辑。切换包管理器或调整npm版本
npm 8.x部分版本对experimental版本的peer依赖解析存在兼容性问题,可尝试降级到npm 7.x版本,或直接切换到yarn包管理器——yarn对非常规版本号的依赖解析逻辑更宽松,大概率能绕过此问题。临时修改依赖库的package.json
若上述方法均无效,可手动找到node_modules/react-jvectormap/package.json,将其中的peer依赖字段修改为react-dom >=0.14 || 0.0.0-experimental-*,保存后重新运行npm i。注意此为临时方案,下次安装依赖时修改会被覆盖,需重复操作。
内容的提问来源于stack exchange,提问作者Ilya L.

