React Native使用GiftedChat报RNCSafeAreaProvider重名注册错误
问题背景
在未使用Expo的React Native CLI项目中,导入使用react-native-gifted-chat库的GiftedChat组件时触发报错:
Invariant Violation: Tried to register two views with the same name RNCSafeAreaProvider, js engine: hermes
已尝试过react-native-safe-area-context相关issue中列出的多套解决方案,已知多包依赖不同版本react-native-safe-area-context会触发同类问题,已完成以下排查:
- 将
react-native-safe-area-context升级至发帖时最新的4.2.5版本,问题未解决 - 尝试卸载
react-native-safe-area-context后全量清缓存重装依赖,执行步骤为:- 执行
rm node_modules删除项目依赖目录 - 执行
rm -rf ios/Pods && ios/Podfile.lock清除iOS端Pods缓存与锁文件 - 执行
rm package-lock.json删除npm依赖锁文件 - 执行
npm install重装npm依赖 - 执行
npx pod-install重装iOS端Pods依赖 - 重新构建项目后报错依旧
当前判断问题与react-native-gifted-chat包相关,项目相关依赖版本:
- 执行
react-native: 0.66.4react-native-safe-area-context: ^3.1.9react-native-gifted-chat: ^1.0.0
修复方案
报错根因是项目中存在两份不同版本的react-native-safe-area-context同时被原生端注册,你之前的清理操作存在命令参数错误,加上版本未对齐,导致问题一直存在,按以下步骤操作即可解决:
- 先执行
npm ls react-native-safe-area-context打印全依赖树,确认react-native-gifted-chat依赖的react-native-safe-area-context具体版本号 - 对齐版本:RN 0.66版本最高适配
react-native-safe-area-context3.x系列,你之前升4.2.5本身就存在版本兼容问题,且react-native-gifted-chat@1.0.0默认依赖的也是3.x版本,直接把项目里的react-native-safe-area-context版本固定为3.3.2(3.x系列适配RN0.66的稳定版) - 在项目
package.json中添加resolutions字段,强制全项目所有依赖都使用同一个版本的react-native-safe-area-context,避免多版本共存:
{ "resolutions": { "react-native-safe-area-context": "3.3.2" } }
- 修正之前的清理命令,补全缺失参数,彻底清除旧缓存后重装依赖:
- 执行
rm -rf node_modules(原命令缺-rf参数,无法删除目录) - 执行
rm -rf ios/Pods ios/Podfile.lock(原命令&&后缺rm指令,实际没删掉锁文件) - 执行
rm package-lock.json - 执行
npm install - 执行
cd ios && pod install --repo-update - 回到项目根目录执行
npx react-native start --reset-cache启动带缓存清理的Metro服务,再重新编译项目即可
- 执行
内容的提问来源于stack exchange,提问作者Javier
相关产品推荐
相关产品推荐

