Vibe Tutorial
Localhost 与公网访问

9.2 局域网真机调试

Tip

模拟器是美好的童话,真机才是残酷的现实。


1. 为什么要学这个?

你在 Chrome 的"手机模式"下调试得很完美:点击流畅,布局完美。 你信心满满地上线了。 老板拿出 iPhone 一试:"为什么这个下拉菜单点不开?" 你一查,发现你用了 :hover css 属性。 电脑有鼠标,能悬停;手机只有手指,要么点,要么不点,不存在"悬停"。

这种"鼠标思维"导致的 Bug,模拟器测不出来。你必须把网站跑在真机上。


2. 核心概念:0.0.0.0 vs 127.0.0.1

想让手机访问电脑,必须这就得过两关:

第一关:耳朵朝外 (Listen)

默认情况下 (localhost),Next.js 只监听内部声音。 我们需要把监听地址改为 0.0.0.0

  • 127.0.0.1: "我不听我不听",只听自己的。
  • 0.0.0.0: "来者不拒",监听所有网卡(Wi-Fi, 网线)。

第二关:找到门牌 (IP)

你的电脑在局域网里也有一个身份证,通常是 192.168.x.x。手机要通过这个地址找到你。


3. 解决方案 (HOW)

第一步:让 Next.js 敞开大门

修改 package.json,把启动命令改一下:

"scripts": {
  "dev": "next dev -H 0.0.0.0" 
}

(注:-H 0.0.0.0 就是告诉 Next.js:别害羞,向全网广播。)

第二步:查找电脑 IP

  • Windows: 打开终端输入 ipconfig,找到 IPv4 地址。
  • Mac/Linux: 输入 ifconfigip a

第三步:真机访问

确保手机和电脑连在同一个 Wi-Fi 下。 手机浏览器输入:http://192.168.1.5:3000 (假设你的电脑 IP 是 192.168.1.5)。


4. 真实案例

Story

星巴克的"隐形墙"

某自由职业者在星巴克写代码,想给对面的客户演示 Demo。 他自信地让客户连上星巴克 Wi-Fi,输入了自己的 IP。 转圈圈,连不上。 他以为是代码挂了,排查了半小时。

真相: 公共场所 (星巴克、机场) 的 Wi-Fi 通常默认开启 AP Isolation (接入点隔离)。 为了安全,路由器禁止连接在同一个 Wi-Fi 下的设备互相说话(防止黑客扫描你的电脑)。

Vibe 心法:局域网调试是性价比最高的真机验证手段。但在公共网络下,手机热点才是你最值得信赖的局域网。


5. 本章小结

  1. 必须要真机:触感、震动、刘海屏,这些是模拟器模拟不出来的。
  2. 监听全网next dev -H 0.0.0.0 是真机调试的标配。
  3. 网络隔离:如果连不上,先检查是不是用的公共 Wi-Fi,或者防火墙没关。