React Native Web项目安装@reduxjs/toolkit出现ERESOLVE依赖树错误如何解决?
依赖冲突根本原因
- @reduxjs/toolkit@1.6.0的peerOptional依赖要求react版本为
^16.14.0 || ^17.0.0,但你的项目中三个子包的react最高版本仅为16.12.0,mobile端react版本更是只有16.8.6,完全不符合版本要求 - monorepo下存在多版本react-native冲突:common包依赖react-native@0.61.5,mobile包依赖react-native@0.60.5,两个版本本身不兼容,连带其绑定的peer依赖react、@react-native-community/cli版本也会发生冲突
- @react-native-community/cli版本和react-native版本强绑定,react-native版本不统一的情况下必然会出现cli相关的冲突报错
解决方案
按实施成本从低到高排序:
方案一:短期临时绕过(无需修改依赖版本)
npm 7及以上版本默认开启peer依赖严格检查,你可以直接添加参数跳过检查即可正常安装:
npm install --legacy-peer-deps
只要你的业务代码没有用到redux toolkit依赖高版本react的特性,安装完成后就可以正常运行,是最快的解决办法。
方案二:降低redux toolkit版本(无需改动现有其他依赖)
你可以将@reduxjs/toolkit降到适配低版本react的版本,比如1.5.1,该版本的peer依赖要求仅为react≥16.8.0,刚好适配你项目中所有的react版本,操作步骤:
- 卸载common包中现有版本:
npm uninstall @reduxjs/toolkit -w @monorepo/common - 安装适配版本:
npm install @reduxjs/toolkit@1.5.1 -w @monorepo/common
该方案不会改动现有RN、react相关依赖,稳定性最高,适合不想调整现有项目版本的场景。
方案三:统一升级所有依赖(长期解决方案)
如果需要使用高版本redux toolkit的新特性,你需要统一所有子包的依赖版本:
- 把common、mobile包的react-native都升到同一个版本,比如0.66.x,对应的react版本同步升到17.0.2
- web端的react、react-dom也同步升级到17.0.2,react-native-web升到适配react 17的对应版本
- 所有react-native相关的工具依赖比如@types/react-native、@react-native-community/cli都升到和react-native版本匹配的版本
- 如果你使用的是npm 8及以上版本,可以在根package.json中添加
overrides字段强制统一所有子包的依赖版本,避免多版本冲突:
{ "overrides": { "react": "^17.0.2", "react-native": "^0.66.0" } }
- 升级完成后删除所有node_modules文件夹和package-lock.json文件,重新执行
npm install即可
注意:升级RN版本需要同步修改安卓、iOS原生端的配置,如果你使用了expo框架还需要对应升级expo的版本。
内容的提问来源于stack exchange,提问作者B_M
相关产品推荐
相关产品推荐

