将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
相关产品推荐
相关产品推荐

