运行npm run ios遇Invariant Violation错误,迁Mac后故障
解决Mac环境下Expo iOS运行的两个核心错误
遇到的错误信息
ERROR Invariant Violation: Your JavaScript code tried to access a native module that doesn't exist.
提示:若尝试使用Expo Go不支持的模块,需创建应用的开发构建
ERROR Invariant Violation: "main" has not been registered. 该问题可能由以下原因导致:
- Metro(本地开发服务器)在错误文件夹启动,请检查Metro是否运行,停止后在当前项目重启。
- 某模块加载失败导致未调用AppRegistry.registerComponent。
注:该项目在Windows环境运行正常,迁移到Mac后出现上述故障。
分步解决方案
1. 解决「原生模块不存在」问题
- 排查第三方依赖:逐个检查项目中使用的库,确认是否包含Expo Go不支持的原生模块。如果存在这类模块,放弃使用Expo Go,改用开发构建方式运行项目。
- 重装依赖:删除项目根目录下的
node_modules文件夹、package-lock.json文件,执行npm install命令重新安装所有依赖,确保Mac环境下依赖安装完整无损坏。
2. 解决「"main"未注册」问题
- 重启Metro服务器:彻底关闭当前运行的Metro进程,回到项目根目录执行
npx expo start --clear命令,强制清除缓存并在正确目录启动服务器。 - 定位模块加载失败原因:查看终端输出的完整错误日志,找到导致加载失败的具体模块,检查该模块是否兼容Mac环境,或是存在配置、安装遗漏。确保所有依赖加载完成后,
AppRegistry.registerComponent能被正常调用。
内容的提问来源于stack exchange,提问作者Natalie Sumbo
相关产品推荐
相关产品推荐

