Expo SDK42升级43后React Native应用无法启动如何解决
问题根因
三个报错存在明确因果关系,核心崩溃点和无关警告区分如下:
- AsyncStorage相关输出是非阻断警告,由你使用的Firebase 8.2.3版本内部引用React Native核心中已废弃的AsyncStorage模块触发,不会直接导致应用启动失败。
- 核心崩溃原因是
TypeError: (0, _expoModulesCore.requireNativeModule) is not a function:从Expo SDK42升级到43后,项目缺失expo-modules-core这个SDK43新增的核心基础依赖,且未安装被多个Expo官方包(expo-firebase-recaptcha、expo-facebook等)依赖的expo-crypto包。模块加载到ExpoCrypto时,因为找不到expo-modules-core导出的方法直接抛出异常,JS bundle执行中断,后续的AppRegistry.registerComponent逻辑没有运行,才触发了最后一条"main has not been registered"的报错。 - 你之前删除node_modules和锁文件重装无效的原因很简单:package.json中没有声明上述两个缺失的依赖,包管理器不会自动拉取未声明的包。
修复步骤
按顺序执行以下操作即可解决问题:
- 安装SDK43对应版本的缺失依赖,注意版本必须严格匹配,不要安装更高版本避免新的兼容问题:
yarn add expo-modules-core@~0.4.8 expo-crypto@~10.0.3 - 处理AsyncStorage警告(可选,不影响启动):
你已经安装了独立版@react-native-async-storage/async-storage,只需要在项目入口文件(App.js或index.js)最顶部、导入Firebase之前,显式给Firebase指定AsyncStorage实现即可消除警告,示例代码:import AsyncStorage from '@react-native-async-storage/async-storage'; import firebase from 'firebase'; // 原有firebase配置 const firebaseConfig = { // 你自己的firebase配置项 }; if (!firebase.apps.length) { firebase.initializeApp(firebaseConfig); // 显式指定持久化存储,避免Firebase读取核心废弃模块 firebase.auth().setPersistence( firebase.auth.Auth.Persistence.LOCAL ); } - 全量清理缓存后重启服务,避免旧缓存导致问题复现:
执行命令前先彻底杀掉手机端运行的Expo Go进程,启动后重新扫码连接即可。# 清理Metro、Expo缓存启动 yarn start -c - 兜底排查:
如果执行完上述步骤仍然报相同错误,移除不兼容的第三方包expo-firestore-offline-persistence即可,SDK43本身已原生支持Firestore离线持久化,不需要该第三方包做适配:yarn remove expo-firestore-offline-persistence
说明
最后一条"main has not been registered"是模块加载中断的连带报错,不需要单独处理,前面的核心崩溃修复后会自动消失。
内容的提问来源于stack exchange,提问作者user11836845
相关产品推荐
相关产品推荐

