React Native降级适配Viro遇Expo版本不兼容及buffer模块缺失问题
解决React Native降级后Expo运行的版本不兼容及buffer模块缺失问题
问题根源
- Expo SDK与React Native版本不匹配:Expo SDK 45.0.0强制要求搭配react-native@0.68.2,降级到0.65.1后版本完全不兼容,这是核心警告的原因。
- buffer模块缺失:RN版本降级后,部分核心Node模块(如buffer)可能未被默认包含,或者依赖包
safe-buffer找不到对应的buffer依赖。
分步解决方案
1. 同步降级Expo SDK到适配react-native@0.65.1的版本
react-native@0.65.1对应的是Expo SDK 43,需将所有Expo相关依赖同步降级到该版本:
- 修改
package.json中的Expo依赖版本示例:
其余"expo": "~43.0.0", "expo-app-loading": "~1.2.1", "expo-font": "~10.0.3"expo-开头的依赖都要对应SDK43的兼容版本 - 删除旧依赖文件并重新安装:
rm -rf node_modules yarn.lock yarn install
2. 修复buffer模块找不到的问题
方案一:手动安装buffer模块
yarn add buffer
方案二:配置Metro bundler支持Node核心模块解析
在项目根目录创建或修改metro.config.js,添加以下内容:
const { getDefaultConfig } = require('@expo/metro-config'); const config = getDefaultConfig(__dirname); config.resolver.extraNodeModules = { buffer: require.resolve('buffer'), }; module.exports = config;
3. 彻底清除缓存并重启项目
执行以下命令清理所有缓存:
watchman watch-del-all yarn start --reset-cache
额外注意事项
- 降级Expo SDK后,第三方依赖(如
@react-navigation/native、@rneui/themed)可能需要调整到适配SDK43的版本,避免出现新的兼容性问题。 - Viro包不支持纯Expo项目,需先使用
expo prebuild将项目转为裸工作流,再按照Viro官方文档完成配置。
内容的提问来源于stack exchange,提问作者MrObscure
相关产品推荐
相关产品推荐

