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

React Native Expo应用依赖致崩溃求助:附依赖列表及尝试操作

Expo React Native应用崩溃/白屏问题排查与修复方案
  • 锁定依赖版本,避免兼容冲突
    把package.json里所有依赖的版本号改成具体数值,去掉~和^符号,比如:

    "dependencies": {
      "@react-navigation/native": "6.1.6",
      "@react-navigation/native-stack": "6.9.12",
      "expo": "48.0.15",
      "expo-file-system": "15.2.2",
      "expo-image-picker": "14.1.1",
      "expo-location": "15.1.1",
      "expo-sqlite": "11.1.1",
      "expo-status-bar": "1.4.4",
      "react": "18.2.0",
      "react-dom": "18.2.0",
      "react-native": "0.71.7",
      "react-native-maps": "1.3.2",
      "react-native-web": "0.18.10"
    }
    

    然后删除node_modules、package-lock.json(或yarn.lock),重新执行npm install或yarn install。

  • 替换弃用的expo-app-loading
    Expo 48起expo-app-loading已被弃用,这很可能是白屏/崩溃的原因:

    1. 移除旧依赖:npm uninstall expo-app-loading
    2. 安装替代库:npx expo install expo-splash-screen
    3. 修改启动代码,用expo-splash-screen控制闪屏,确保资源加载完成后再隐藏,示例逻辑:
      import * as SplashScreen from 'expo-splash-screen';
      import { useEffect, useState } from 'react';
      
      // 保持闪屏显示直到资源加载完成
      SplashScreen.preventAutoHideAsync();
      
      export default function App() {
        const [isReady, setIsReady] = useState(false);
      
        useEffect(() => {
          async function prepare() {
            // 这里写你的资源加载逻辑(比如初始化SQLite、加载字体等)
            try {
              await new Promise(resolve => setTimeout(resolve, 2000));
            } catch (e) {
              console.warn(e);
            } finally {
              setIsReady(true);
              await SplashScreen.hideAsync();
            }
          }
      
          prepare();
        }, []);
      
        if (!isReady) {
          return null;
        }
      
        // 你的应用组件
        return <YourAppComponent />;
      }
      
  • 清除缓存,排查react-native-maps兼容问题
    执行npx expo start -c强制清除Expo缓存,重新生成原生代码缓存。同时检查app.json里是否配置了地图相关权限:

    • iOS在infoPlist里添加:
      "NSLocationWhenInUseUsageDescription": "需要获取您的位置以显示地图",
      "NSLocationAlwaysUsageDescription": "需要获取您的位置以显示地图"
      
    • Android在android.permissions里添加:
      "ACCESS_FINE_LOCATION",
      "ACCESS_COARSE_LOCATION"
      
  • 查看崩溃日志定位具体问题

    • 用Expo Go运行时,摇手机调出开发者菜单,选择「Show Logs」查看实时错误信息,找到崩溃前的报错堆栈,比如模块缺失、权限未配置、原生代码冲突等。
    • 安卓可以用adb logcat *:E查看系统级错误日志;iOS用Xcode打开项目,查看控制台的崩溃详情。
  • 逐步排查依赖冲突
    先注释掉非核心依赖(比如expo-sqlite、expo-image-picker),只保留expo、react、react-native、react-navigation核心包,确认应用能正常启动后,再逐个恢复其他依赖,每恢复一个就测试一次,找到导致崩溃的具体依赖。

  • 重置Expo环境
    更新Expo CLI到最新版本:npm install -g expo-cli,然后执行npx expo start --clear彻底清除所有缓存。如果是bare workflow项目,执行npx expo prebuild --clean重新生成原生代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 10:22:49