React Native iOS模拟器Hot Reload失效 不手动打包无法获取最新JS变更
React Native iOS模拟器无法同步JS变更、热重载失效解决方案
该问题本质是Debug模式下iOS项目没有连接本地Metro服务,而是直接读取了预生成的main.jsbundle静态包,所以只有手动执行打包命令后变更才会生效,可按以下步骤排查修复:
- 检查Xcode构建配置
- 打开iOS目录下的
.xcworkspace(若未集成Pod则打开.xcodeproj),选中项目主Target,进入Build Phases标签页,找到Bundle React Native code and images脚本项,确认脚本未强制开启生产打包逻辑,默认Debug模式下该脚本会跳过静态包生成、走Metro服务拉取实时代码。 - 进入Build Settings标签页,搜索
DEAD_CODE_STRIPPING配置项,Debug模式下将值设置为NO,死代码剥离开启会阻断React Native调试模式与Metro的连接。
- 打开iOS目录下的
- 检查模拟器与Metro服务状态
- 启动模拟器后按
cmd + D唤出调试菜单,确认Disable Fast Refresh未被勾选。 - 检查8081端口是否被其他进程占用,占用则关闭对应进程后执行命令重启Metro并清理缓存:
npx react-native start --reset-cache
- 启动模拟器后按
- 全量清理缓存重新构建
如果以上配置均正常,按顺序执行全量清理操作:- 关闭Xcode、模拟器,终止当前运行的Metro服务
- 清理本地临时缓存:
rm -rf $TMPDIR/react-* && rm -rf $TMPDIR/metro-* - 重新安装依赖:
rm -rf node_modules && npm install(yarn用户替换为yarn install) - 清理iOS构建与Pod缓存:
cd ios && rm -rf Pods Podfile.lock build && pod install && cd .. - 重新启动项目:先运行Metro服务
npx react-native start --reset-cache,再新开终端执行iOS启动命令npx react-native run-ios
修复后Debug模式下无需手动执行npx react-native bundle相关打包命令,Metro会自动同步JS变更、触发热重载。
内容的提问来源于stack exchange,提问作者cfoster5
相关产品推荐
相关产品推荐

