Expo从SDK 39升级到SDK 42后出现react-native-screens相关打包错误如何解决?
问题原因
- 版本不匹配是问题的核心诱因,包含两个错误点:
- Expo SDK 升级到42后,
react-native依赖仍保留SDK 39对应的版本,未同步升级到SDK 42的匹配版本,导致原生模块解析逻辑异常 - 项目同时安装了
@react-navigation/stackv5和@react-navigation/native-stackv6,两个不同大版本的导航栈对react-native-screens的接口要求存在冲突,3.4.0版本的react-native-screens无法同时适配两个版本的导航组件,TransitionProgressContext模块找不到就是该冲突的典型表现。
- Expo SDK 升级到42后,
修复步骤
- 同步react-native版本到Expo SDK 42对应的官方版本
修改package.json中react-native字段为:
"react-native": "https://github.com/expo/react-native/archive/sdk-42.0.0.tar.gz"- 同步react-native版本到Expo SDK 42对应的官方版本
- 统一导航依赖版本,避免跨版本冲突
如果你日常使用v5系列的导航栈,直接卸载v6版本的native-stack即可,执行命令:
如果你要使用v6版本的导航栈,将所有@react-navigation开头的依赖统一升级到v6适配版本即可。npm uninstall @react-navigation/native-stack # 用yarn的用户执行:yarn remove @react-navigation/native-stack- 统一导航依赖版本,避免跨版本冲突
- 清除缓存并重启项目
先删除项目根目录下的node_modules文件夹、package-lock.json(yarn用户删除yarn.lock)文件,再依次执行:
npm install # yarn用户执行yarn install expo start -c- 清除缓存并重启项目
- 完成以上操作后打包错误即可解决。
内容的提问来源于stack exchange,提问作者sparklemo7ion
相关产品推荐
相关产品推荐

