Expo Go连接Metro bundler失败:无法解析.exp.direct主机地址
Expo Go连接Metro bundler失败:无法解析.exp.direct主机地址
我之前也碰到过一模一样的问题,折腾了好一阵才搞定,给你分享几个亲测有效的解决办法,你可以挨个试试:
1. 把网络基础问题抠细(你已经做了部分,补几个容易忽略的细节)
- 确认PC和手机的WiFi是完全同网段:比如PC连的是路由器5GHz频段,手机别连2.4GHz的——有些路由器双频名字相似但实际是不同网段,这是很容易踩的坑。
- 重新测试ping连通性:在手机上装个终端类APP(比如Termux),执行
ping 192.168.1.X(把X换成你PC的局域网IP),如果还是不通,那问题肯定在PC的网络设置上,和Expo本身关系不大。- 检查PC的WiFi适配器:右键任务栏WiFi图标→打开网络和Internet设置→更改适配器选项→右键当前WiFi→属性→Internet协议版本4(TCP/IPv4),确保是“自动获取IP地址”,别手动设置了和路由器不匹配的网段。
- 重启路由器:有时候路由器的DHCP缓存或者ARP表出问题,重启一下能解决很多莫名其妙的局域网连接故障。
2. 手动指定Metro的网络接口,避免自动选择出错
有时候Metro会自动绑定到错误的网络接口(比如PC同时连了有线和无线,它选了有线IP但手机连的是无线),可以强制指定:
- 在项目根目录创建或修改
metro.config.js,添加以下配置:
const { getDefaultConfig } = require('expo/metro-config'); const config = getDefaultConfig(__dirname); config.server = { port: 8081, // 替换成你的PC局域网IP,比如192.168.1.105 host: '192.168.1.X', }; module.exports = config;
- 然后重启Metro并清除缓存:执行
npx expo start --clear,旧缓存可能会导致新配置不生效。 - 之后在Expo Go里手动输入
exp://192.168.1.X:8081试试连接。
3. 排查端口和Expo隧道服务的问题
- 检查端口占用:在PC命令行执行
netstat -ano | findstr :8081,如果有其他进程占用8081端口,就换个端口启动,比如npx expo start --port 19000。 - 重置Expo账号关联的隧道服务:执行
npx expo logout然后npx expo login,重新登录你的Expo账号,有时候账号绑定的隧道解析服务会出小问题,重置后能恢复。
4. 关闭Windows的网络隔离设置
Windows的“公用网络”配置会限制局域网设备连接,即使你关了防火墙也没用:
- 打开Windows设置→网络和Internet→WiFi→点击当前连接的WiFi名称→下拉找到“网络配置文件类型”,确保设置为专用。
- 另外,有些杀毒软件的“局域网防护”功能是独立于系统防火墙的,比如360、McAfee这类,暂时完全关闭杀毒软件再测试连接。
5. 终极 workaround:用USB连接调试(最稳定)
如果以上方法都不管用,试试USB连接,完全绕开WiFi的问题:
- 先在手机上开启开发者选项和USB调试(一般是连续点击系统版本号7次开启开发者选项,然后在里面找到USB调试开关打开)。
- 用原装USB线连接PC和手机,确保PC安装了对应品牌的手机驱动(比如小米的Mi PC Suite、华为的HiSuite,或者直接用Windows自动安装的驱动)。
- 执行
npx expo start --usb,然后打开Expo Go,选择“USB连接”或者扫描终端里的QR码,基本都能成功连上。
内容来源于stack exchange




