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已被弃用,这很可能是白屏/崩溃的原因:- 移除旧依赖:
npm uninstall expo-app-loading - 安装替代库:
npx expo install expo-splash-screen - 修改启动代码,用
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"
- iOS在
查看崩溃日志定位具体问题
- 用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
相关产品推荐
相关产品推荐

