React Native 0.52升级后Metro Bundler内部错误求助
React Native 0.52.0升级后Metro Bundler内部错误的解决方案
我之前也碰到过一模一样的问题——macOS 10.12.6 + Node 9.4.0环境下,升级RN到0.52.0、React到16.2.0后,不管是旧项目还是用react-native init新建的项目,都出现Metro Bundler内部错误,常规的清理缓存、重装依赖完全没用。折腾了半天终于找到根源,下面是亲测有效的解决步骤:
1. 降级Node到8.x稳定版
RN 0.52.0发布时,Node 9.x的一些新特性还没被Metro Bundler适配,这是导致崩溃的核心原因。推荐用nvm快速切换版本:
# 安装Node 8.17.0(和RN 0.52.0兼容的稳定版) nvm install 8.17.0 # 切换到该版本 nvm use 8.17.0
切换完成后,执行全套清理重装操作:
rm -rf node_modules # yarn用户 yarn cache clean # npm用户 npm cache clean --force watchman watch-del-all # 重新安装依赖 yarn install # 或 npm install
2. 锁定Metro相关依赖版本
有时候项目自动安装的Metro版本和RN 0.52.0不兼容,打开package.json,确保以下依赖版本正确:
{ "metro-react-native-babel-preset": "^0.45.6", "metro": "^0.45.6" }
修改后重新执行依赖安装命令即可。
3. 调整Xcode项目配置
Xcode的一些默认设置也可能影响RN的运行:
- 打开Xcode项目,进入
Build Settings,找到Dead Code Stripping,设置为YES; - 清理Xcode的Derived Data:点击顶部菜单栏
Xcode -> Preferences -> Locations,在Derived Data一栏点击箭头打开文件夹,删除所有内容后重启Xcode。
4. 处理原生模块主线程警告(可选)
日志里提到的RCTImageLoader需要主线程初始化的警告,虽然不是崩溃的直接原因,但可以提前修复避免后续版本的问题:
- 找到项目中的
RCTImageLoader.m文件,添加以下代码:
+ (BOOL)requiresMainQueueSetup { return YES; }
如果是第三方模块的警告,可以暂时忽略,等待模块作者更新即可。
按照以上步骤操作后,我的项目就能正常通过Xcode或CLI启动了,你可以试试看。
内容的提问来源于stack exchange,提问作者Bill
相关产品推荐
相关产品推荐

