React Native依赖冲突解决:替代--legacy-peer-deps的方案
解决@react-native-community/cli安装时的依赖冲突问题
核心冲突分析
遇到的问题分为两类:
- React版本冲突:项目使用React 18.1.0,但
@aws-amplify/ui-react@2.20.0依赖的旧版@radix-ui/*包(如@radix-ui/react-accordion@0.1.6等)仅支持React 16.8或17.x,不兼容React 18。 - ESLint版本冲突:项目中的ESLint为7.32.0,但
@react-native-community/eslint-config@3.2.0要求ESLint版本必须≥8.x。
彻底解决步骤
一、修复React与Radix UI的兼容问题
旧版Radix UI不支持React 18,但新版@aws-amplify/ui-react已适配React 18,直接升级即可:
- 先查看
@aws-amplify/ui-react的最新版本:npm show @aws-amplify/ui-react versions --json | grep -E '"[0-9]+\.[0-9]+\.[0-9]+"' | tail -10 - 升级到支持React 18的版本(推荐直接更新到最新3.x版本):
若不想跨大版本,可选择2.x系列中支持React 18的补丁版(如2.30.0及以后版本):npm install @aws-amplify/ui-react@latestnpm install @aws-amplify/ui-react@^2.30.0
二、解决ESLint版本不匹配问题
@react-native-community/eslint-config@3.x必须搭配ESLint 8+使用,需同步升级相关依赖:
- 升级ESLint到8.x版本:
npm install eslint@^8.0.0 --save-dev - 升级配套ESLint插件,避免新的兼容问题:
npm install @babel/eslint-parser@latest @typescript-eslint/eslint-plugin@latest @typescript-eslint/parser@latest eslint-plugin-jest@latest --save-dev - 重新安装
@react-native-community/eslint-config确保版本兼容:npm install @react-native-community/eslint-config@^3.2.0 --save-dev
三、清理缓存并重新安装依赖
完成上述升级后,清理旧依赖环境再重装:
- 删除
node_modules和锁文件:rm -rf node_modules package-lock.json - 重装所有依赖:
npm install - 再次尝试安装
@react-native-community/cli:npm install @react-native-community/cli
备选方案(无法升级依赖时使用)
如果暂时无法升级@aws-amplify/ui-react或ESLint,可在package.json中添加overrides字段强制指定兼容版本:
{ "overrides": { // 强制冲突的radix-ui包使用项目已安装的React版本 "react": "$react", "react-dom": "$react-dom", // 强制升级ESLint到符合要求的版本 "eslint": "^8.27.0" } }
添加后执行npm install即可,但这种方式存在兼容性风险,需测试项目功能是否正常。
内容的提问来源于stack exchange,提问作者bieboebap
相关产品推荐
相关产品推荐

