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

Expo弹出的React Native TS应用运行报node_modules语法错误

问题说明

从Expo弹出的React Native 0.68.2 TypeScript项目,编译流程正常但Android模拟器运行时报错,当前项目依赖如下:

"dependencies": {
  "@emotion/native": "^11.0.0",
  "@emotion/react": "^11.7.1",
  "@react-native-async-storage/async-storage": "^1.17.6",
  "@react-native-community/datetimepicker": "4.0.0",
  "@react-navigation/bottom-tabs": "^6.0.5",
  "@react-navigation/native": "^6.0.2",
  "@react-navigation/native-stack": "^6.1.0",
  "@types/jest": "^28.1.4",
  "@types/react-test-renderer": "^18.0.0",
  "axios": "^0.24.0",
  "dayjs": "^1.10.7",
  "expo-location": "~14.0.1",
  "lottie-react-native": "5.0.1",
  "mobx": "^6.3.12",
  "mobx-react-lite": "^3.2.3",
  "moment": "^2.29.1",
  "react": "17.0.2",
  "react-dom": "17.0.2",
  "react-hook-form": "^7.22.5",
  "react-native": "0.68.2",
  "react-native-elements": "^3.4.2",
  "react-native-map-clustering": "^3.4.2",
  "react-native-maps": "0.29.4",
  "react-native-qrcode-svg": "^6.1.2",
  "react-native-raw-bottom-sheet": "^2.2.0",
  "react-native-safe-area-context": "4.3.1",
  "react-native-screens": "~3.10.1",
  "react-native-svg": "^12.3.0",
  "react-native-web": "0.17.1",
  "rn-credit-card": "^0.1.1"
}

报错截图参考:
Android运行时错误截图

根因判断

报错核心是Expo模块运行时环境缺失,属于Expo弹出为裸工作流后的典型配置遗漏:弹出流程不会自动补全Expo模块在原生端的适配逻辑,直接引入expo-location这类Expo生态库时,Android端无法找到对应的原生模块实现,就会抛出运行时错误。

修复步骤
  • 安装Expo核心运行时依赖:在项目根目录执行npx install-expo-modules@45,对应React Native 0.68.2匹配的Expo SDK 45版本,该命令会自动修改Android端Gradle配置、MainApplication入口逻辑,补全Expo模块的加载环境。执行完成后执行yarn add expo@45补全核心JS层依赖。
  • 清理构建缓存:进入android目录执行./gradlew clean,删除之前编译生成的旧缓存文件,避免旧配置干扰新的构建流程。
  • 校验MainApplication.java配置:打开android/app/src/main/java/[你的应用包名]/MainApplication.java,确认ReactNativeHost实例已被Expo提供的Wrapper包裹,核心配置如下:
import expo.modules.ReactNativeHostWrapper;

public class MainApplication extends Application implements ReactApplication {
  private final ReactNativeHost mReactNativeHost = new ReactNativeHostWrapper(
    this,
    new ReactNativeHost(this) {
      @Override
      public boolean getUseDeveloperSupport() {
        return BuildConfig.DEBUG;
      }

      @Override
      protected List<ReactPackage> getPackages() {
        List<ReactPackage> packages = new PackageList(this).getPackages();
        return packages;
      }

      @Override
      protected String getJSMainModuleName() {
        return "index";
      }
    }
  );

  @Override
  public ReactNativeHost getReactNativeHost() {
    return mReactNativeHost;
  }
  // 其余生命周期方法保持原有逻辑即可
}
  • 补全定位权限:打开android/app/src/main/AndroidManifest.xml,在manifest节点下添加expo-location所需的权限声明:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
  • 重新构建安装:回到项目根目录执行yarn android,重新打包安装到模拟器即可,不要复用之前已经安装到模拟器的旧APK。
避坑提示
  • 所有Expo生态下的依赖版本必须和当前项目对齐的Expo SDK版本严格匹配,你当前项目对应SDK 45,后续如果要引入其他expo-*开头的依赖,必须选择支持SDK 45的版本,跨版本会直接触发类找不到、方法签名不匹配的运行时错误。
  • 每次修改原生端配置后都要执行Gradle清理再重新构建,否则缓存会导致修改不生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 00:48:23