为何Expo应用在Expo Go可运行,开发构建版却崩溃?
问题原因及解决方案
核心原因
报错null is not an object (evaluating '_ReanimatedModule.default.createNode')本质是react-native-reanimated模块未正确集成或版本不兼容。开发构建版作为自定义客户端,不像Expo Go预打包了适配好的依赖,因此会出现Expo Go正常但开发构建版崩溃的情况。"main has not been registered"是该错误引发的连锁问题,解决核心错误后会自动消失。
具体排查方向
版本兼容性冲突
当前项目的React Native版本与react-native-reanimated版本不匹配。你之前通过降级RN到0.69.6解决过类似问题,说明当前RN版本和reanimated版本存在适配问题,需要确认两者版本兼容。reanimated配置缺失
开发构建版需要手动确保reanimated的Babel配置正确:- 检查
babel.config.js中是否添加了react-native-reanimated/plugin插件,且该插件必须放在所有插件的最后一位 - 示例配置:
module.exports = function(api) { api.cache(true); return { presets: ['babel-preset-expo'], plugins: [ // 其他插件 'react-native-reanimated/plugin' // 必须放在最后 ], }; };
- 检查
缓存残留问题
Metro或EAS构建缓存中的旧依赖残留会引发错误:- 清除Metro缓存:执行
npx expo start --clear - 清除EAS构建缓存:运行
eas build --clear-cache,或在EAS控制台手动清除构建缓存
- 清除Metro缓存:执行
原生依赖未正确链接
虽然Expo通常会自动链接依赖,但某些情况下reanimated的原生代码未被正确集成到开发构建版中。尝试重新构建开发客户端:eas build --profile development
解决步骤
- 确认react-native-reanimated版本与当前React Native版本兼容,若不兼容则降级或升级reanimated到适配版本
- 修正
babel.config.js中的reanimated插件配置,确保其在插件列表末尾 - 清除所有缓存后重新启动Metro服务
- 重新生成开发构建版并测试
内容的提问来源于stack exchange,提问作者jpryor
相关产品推荐
相关产品推荐

