在学习 React Native 时,遇到的第一个问题就是启动后在真机调试:用相机扫码后,在 Expo Go 应用上并不能正常打开!
文档里给我们提出了通过 Tunnel 方式,那它具体是什么?
原文
https://docs.expo.dev/get-started/start-developing/
Using the Tunnel connection type will make the app reloads considerably slower than on LAN or Local, so it’s best to avoid tunnel when possible. You may want to install and use an emulator or simulator to speed up development if Tunnel is required to access your machine from another device on your network.
关键概念解释:
1. 什么是 Expo 的三种连接方式?
在使用 Expo CLI(开发工具) 启动项目时,你会看到几种连接方式:
连接方式 | 简述 | 优点 | 缺点 |
---|---|---|---|
Tunnel | 通过第三方服务(如 ngrok)将本地服务穿透到公网 | 适用于不同网络环境,跨网络连接 | 最慢,受限于外部服务,可能不稳定 |
LAN | 使用局域网 IP(如 192.168.x.x)连接手机和电脑 | 快速稳定,只要设备在同一局域网 | 要求手机和电脑在同一个 Wi-Fi 下 |
Local | 使用 localhost 或 127.0.0.1 | 最快,仅限模拟器使用 | 实机无法访问,仅限本机模拟器 |
2. 为什么 Tunnel 慢?
Tunnel 是将你本地开发服务器的数据通过外部服务(如 ngrok)转发出去。这个过程中:
- 数据要从你电脑 → ngrok 服务器 → 你的手机,再走一遍反向返回。
- 每次热更新时,数据往返都需要走外网通道。
- 所以非常慢,甚至在网络不稳定的环境下容易失败或无法连接。
3. 哪种方式最推荐?
开发速度(热更新)排序如下:
🥇 Local(最快,推荐用于模拟器)
🥈 LAN(推荐用于真机 + 同局域网)
🥉 Tunnel(只能在无法使用上面两种的场景使用)
什么时候必须使用 Tunnel?
- 手机与电脑不在一个 Wi-Fi 下(比如公司网络有隔离)。
- 你需要远程调试一台不在你本地网络的设备。
- 公司限制了局域网通信,或者你是在公共网络。
官方建议的做法
如果你 不得不使用 Tunnel,那就使用 模拟器(Android Emulator / iOS Simulator) 来加快开发效率。
模拟器运行在电脑本地,因此可以使用 Local 模式,不走任何网络,热更新和构建都飞快。
总结
问题 | 解决方案 |
---|---|
Tunnel 太慢 | 优先改用 LAN 或 Local 模式 |
手机连不上 LAN 模式 | 确保手机和电脑同一 Wi-Fi |
实在只能用 Tunnel | 使用模拟器代替真机开发 |