React Native 0.68.2(Expo构建)无法远程调试 提示代理连接断开

该问题为React Native 0.68.2版本搭配Expo开发时的高频已知问题,和测试所用的模拟器/真机载体无关,0.64版本因未上线新架构调试校验逻辑不会触发同类报错。以下为按操作成本从低到高排序的修复方案,每步操作完成后重启Metro打包服务再验证连接状态:
1. 修复端口绑定/占用问题(80%同类问题可通过该步解决)
RN 0.68配对的Expo SDK默认会将调试代理绑定到IPv6环回地址::1,但调试页访问localhost时默认优先走IPv4地址,会直接触发连接断开。
- 第一步先杀掉所有调试相关端口的残留进程:
# macOS / Linux 系统执行 lsof -ti:19000,19001,8081 | xargs kill -9 # Windows 系统先执行以下命令查占用端口的PID netstat -ano | findstr "19000 19001 8081" # 拿到返回结果最后一列的PID值后,执行强制结束命令 taskkill /F /PID 替换为你查到的PID值 - 第二步强制指定代理绑定IPv4地址启动Expo服务:
EXPO_PACKAGER_PROXY_URL=http://127.0.0.1:19000 expo start
2. 修复Hermes引擎调试兼容问题
如果第一步操作后仍无法连接,是RN 0.68版本默认开启的Hermes引擎存在调试协议匹配bug,可临时切换引擎调试:
- 打开项目根目录下的
app.json文件,在expo配置项中新增引擎配置:{ "expo": { // 保留原有其他配置项 "jsEngine": "jsc" } } - 执行清除缓存命令重启服务:
expo start -c
该配置仅影响本地开发调试环境,正式打包时可按需切回Hermes引擎,不会对线上包产生影响。
3. 修复Expo SDK版本已知bug
配对RN 0.68.2的Expo SDK 45早期版本存在调试代理websocket路径校验bug,升级到对应补丁版本即可修复:
expo install expo@~45.0.8
升级完成后删除项目根目录下的node_modules文件夹,重新安装依赖后启动服务即可。
额外避坑
- 不要使用浏览器无痕/隐私模式打开调试页,该模式下部分安全策略会拦截websocket连接触发同类报错
- 等Metro终端打印出
Debugger listening on ws://...的日志后,再在模拟器端点击开启远程调试,不要提前打开调试页等待连接
内容的提问来源于stack exchange,提问作者Alessandro Boscato
相关产品推荐
相关产品推荐

