升级Expo SDK 51后Expo Go崩溃,提示'main'未注册求助
解决Expo SDK 51升级后"Invariant Violation: 'main' has not been registered"错误
针对性排查与修复步骤
1. 彻底重置Metro运行环境
- 立刻停止当前Metro服务,在项目根目录执行强制清理缓存的启动命令:
npx expo start --clear - 确认终端当前路径是项目根目录(即存放
package.json的文件夹),绝对不能在子目录启动Metro。 - 关闭手机上的Expo Go,重新打开后扫码加载项目。
2. 检查AppRegistry注册逻辑
- 确认项目入口文件(通常是
App.js/App.tsx)里存在完整的注册代码,示例:import { AppRegistry } from 'react-native'; import App from './App'; import { name as appName } from './app.json'; AppRegistry.registerComponent(appName, () => App); - 查看Metro终端日志,找
Failed to load module类的报错——这类模块加载失败会直接导致注册逻辑无法执行,找到对应依赖后针对性修复。
3. 修复依赖兼容性问题
从你提供的package.json来看,部分依赖版本和SDK 51(对应RN 0.74.1)不兼容:
- 升级导航库到适配RN 0.74的版本:
npm install @react-navigation/native@^6.1.17 @react-navigation/bottom-tabs@^6.5.20 @react-navigation/drawer@^6.6.15 @react-navigation/native-stack@^6.9.26 - 升级nativewind到支持RN 0.74的版本:
npm install nativewind@^2.0.12 - 重新安装
react-native-vector-icons并同步iOS依赖:npm install react-native-vector-icons@^10.1.0 npx pod-install ios
4. Hermes引擎相关排查
- 检查
app.json里的Hermes配置是否正确:"expo": { "ios": { "jsEngine": "hermes" }, "android": { "jsEngine": "hermes" } } - 清理iOS构建缓存:
cd ios && rm -rf Pods Podfile.lock && pod install && cd .. - 清理Android构建缓存:
cd android && ./gradlew clean && cd ..
5. 重置依赖安装
你的package.json中main字段配置是正确的,但可以尝试完全重置依赖:
rm -rf node_modules package-lock.json npm install
内容的提问来源于stack exchange,提问作者huuninphan
相关产品推荐
相关产品推荐

