症状
浏览器控制台反复出现 failed to connect to websocket,热更新停止,有时退化为整页刷新。开发服务器可能已启动,但浏览器因主机绑定、端口不匹配或代理未转发 websocket 升级而无法连上 HMR 套接字。这在容器与 TLS 终止代理之后很常见。
诊断
用 –host 0.0.0.0 暴露服务;按代理设置 hmr.clientHost/clientPort;确认代理开启 ws 转发。
vite --host 0.0.0.0 --port 5173
根因
浏览器无法向开发服务器建立 HMR websocket,原因是主机绑定、端口不匹配,或代理没有转发 websocket 升级。
修复
把开发服务器绑定到可达的主机;在代理前置时告知 Vite 浏览器应使用的 HMR 主机与端口;配置代理转发 websocket 升级。让服务器、代理与浏览器三者对齐。
验证
刷新页面确认 websocket 连接且无控制台错误,再编辑文件确认浏览器热更新而非整页刷新。HMR 生效即证明已对齐。
常见陷阱
在生产构建依赖 HMR 是误解;HMR 仅开发期,生产应使用静态构建产物。