VSCode Remote连接后React组件不热更新怎么办?
我在用 VSCode Remote-SSH 连接到远程服务器开发 React 项目,本地修改代码后页面完全不热更新,手动刷新也不生效,但终端里 Webpack 显示编译成功了。这是怎么回事?
我试过重启 dev server、检查防火墙、确认端口转发都没问题,但就是看不到更新效果。本地开发时一切正常,一上 Remote 就不行。
import React from 'react';
function App() {
return (
<div>
{/* 改这里文字,页面没反应 */}
<h1>Hello Remote Dev!</h1>
</div>
);
}
export default App;
核心原因就是两个:文件变更检测失败,或者 WebSocket 连接没打通。
先说文件监听问题,这个最常见。远程环境下 inotify 机制可能不工作,需要开启 polling 模式。虽然 polling 会稍微吃点性能,但比起完全不更新强多了。
如果你用的是 Create React App,在启动命令前加个环境变量:
或者在 package.json 里直接写死:
如果是 Vite 项目,改
vite.config.js:interval 设 100ms 够用了,别设太低,不然 CPU 真的会起飞。
自己配的 Webpack,在
devServer里加上:第二个坑是 WebSocket 连接。VSCode 的端口转发有时候会"吞掉" WebSocket 流量,导致 HMR 客户端连不上 dev server。检查浏览器控制台有没有报 WebSocket connection failed 之类的错。
有的话,在 Webpack devServer 配置里加上:
或者干脆绕过 VSCode 的端口转发,自己建个 SSH 隧道:
然后本地浏览器直接访问 localhost:3000。
最后还有个坑,浏览器缓存。远程开发有时候会把静态资源缓存起来,改完代码强制刷新也不生效。开发者工具里勾上 Disable cache,或者无痕模式打开。
基本上 polling 一开,WebSocket 配好,问题就解决了。polling 虽然不是最优解,但远程开发环境下这是最稳的方案。