You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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中没有声明上述两个缺失的依赖,包管理器不会自动拉取未声明的包。
修复步骤

按顺序执行以下操作即可解决问题:

  1. 安装SDK43对应版本的缺失依赖,注意版本必须严格匹配,不要安装更高版本避免新的兼容问题:
    yarn add expo-modules-core@~0.4.8 expo-crypto@~10.0.3
    
  2. 处理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
      );
    }
    
  3. 全量清理缓存后重启服务,避免旧缓存导致问题复现:
    # 清理Metro、Expo缓存启动
    yarn start -c
    
    执行命令前先彻底杀掉手机端运行的Expo Go进程,启动后重新扫码连接即可。
  4. 兜底排查:
    如果执行完上述步骤仍然报相同错误,移除不兼容的第三方包expo-firestore-offline-persistence即可,SDK43本身已原生支持Firestore离线持久化,不需要该第三方包做适配:
    yarn remove expo-firestore-offline-persistence
    
说明

最后一条"main has not been registered"是模块加载中断的连带报错,不需要单独处理,前面的核心崩溃修复后会自动消失。


内容的提问来源于stack exchange,提问作者user11836845

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 18:57:18