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

将Expo项目从48升级至51时反复报错,求解决方案

Expo 48 升级到 51 报错解决方案

针对你升级后反复出现的错误,从你的package.json中可以定位到几个核心冲突点,按以下步骤逐一修复:

1. 移除废弃/冲突依赖

执行以下命令卸载不兼容的包:

npm uninstall expo-permissions react-navigation
  • expo-permissions在Expo 48+已被废弃,权限请求已整合到对应功能模块(如expo-camera、expo-location)
  • 项目同时存在react-navigation v4和@react-navigation v6,两个版本完全不兼容,必须移除v4版本

2. 修复版本强制配置

删除resolutions中强制过低版本的类型依赖,修改后的resolutions如下(若无需强制crypto-js版本可直接删除该字段):

"resolutions": {
  "crypto-js": "3.1.9-1",
  "**/crypto-js": "3.1.9-1"
}

原配置中@types/react和@types/react-native被强制为远低于当前项目的版本,会导致类型系统和依赖树冲突

3. 更新类型依赖

安装适配React Native 0.74的类型包:

npm install @types/react-native@~0.74.0 --save-dev

4. 升级老旧依赖

将部分过旧的依赖升级到兼容Expo 51的版本:

# 升级axios到最新稳定版
npm install axios@latest
# 升级socket.io-client到兼容版本
npm install socket.io-client@latest
# 升级native-base到适配Expo 51的3.x最新版
npm install native-base@^3.4.28

5. 重新安装并修复依赖

清理旧依赖后重新安装:

# 删除旧依赖和锁文件
rm -rf node_modules package-lock.json
# 重新安装依赖
npm install
# 执行Expo自动修复命令
npx expo install --fix

6. 代码适配调整

  • 权限请求替换:将原expo-permissions的调用替换为对应模块的API,例如:
    • 相机权限:import { Camera } from 'expo-camera' → Camera.requestCameraPermissionsAsync()
    • 位置权限:import { Location } from 'expo-location' → Location.requestForegroundPermissionsAsync()
  • 导航代码检查:确保所有导航逻辑使用@react-navigation v6的API(如NavigationContainer替代旧版createAppContainer)
  • 字体路径修正:rnpm字段中的路径拼写错误(assests→assets),或直接移除该字段,改用expo-font加载字体
  • 替换expo-app-loading:该包已废弃,改用expo-splash-screen的preventAutoHideAsync()和hideAsync()控制启动屏

完成以上步骤后重新启动项目,若仍有错误,可查看具体错误日志定位剩余冲突依赖。

内容的提问来源于stack exchange,提问作者Swapnil A Pawar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 07:44:53