vscode中vue项目热重载不生效需先确认使用vite或Vue CLI,检查开发服务器是否运行、端口是否被占、files.autoSave设置、插件是否为Volar(vue3)或Vetur(Vue2),并验证vite.config.ts中HMR配置及sourcemap路径映射。
VSCode 里 Vue 项目热重载不生效?先确认你用的是 Vite 还是 Vue CLI
热重载行为和配置方式完全不同:vue cli 用 vue-cli-service serve,vite 用 vite 或 npm run dev。vscode 本身不提供热重载,它只是编辑器;真正起作用的是底层开发服务器。如果你改了 .vue 文件但浏览器没更新,大概率是服务没跑起来,或者端口被占、https 配置干扰、甚至文件保存没触发(比如禁用了 vscode 的 files.autosave)。
实操建议:
- 终端里手动运行
npm run dev(Vite)或npm run serve(Vue CLI),别只靠插件按钮 - 检查终端输出是否看到
Local: http://localhost:5173/(Vite)或App running at:(Vue CLI) - 打开浏览器访问对应地址,而不是直接双击
index.html - 确认 VSCode 设置里
files.autoSave是onFocusChange或afterDelay,避免“改了没保存”假象
必须装的 VSCode 插件只有两个:Volar 和 typescript Vue Plugin
Vue 3 + `
实操建议:
- 安装
Volar(作者:johnsoncodehk),启用它 - 再装
TypeScript Vue Plugin (Volar)(同一作者),这是让.vue文件内获得 TS 类型检查的关键 - 如果项目用的是 Vue 2,别硬套 Volar;改用
Vetur,并确保vetur.experimental.templateInterpolationService设为true - 重启 VSCode,否则 Volar 的语言服务器不会加载
热重载失效常见原因:HMR 配置被覆盖或监听路径不对
Vite 默认开启 HMR,但某些场景下会静默失败:比如你在 vite.config.ts 里写了 server.watch.ignored 却误加了 **/*.vue;或者用了 alias 指向了 symlink 目录,而系统未开启 server.watch.usePolling;又或者你在 WSL 中开发却没配 server.host: '0.0.0.0',导致 windows 端浏览器无法连接。
立即学习“前端免费学习笔记(深入)”;
实操建议:
- 检查
vite.config.ts中是否意外设置了hmr: false或server.watch.ignored包含 vue 文件 - WSL 用户加一行:
server: { host: '0.0.0.0', port: 5173 },并在 Windows 浏览器访问http://localhost:5173 - 若使用 NFS 或 docker 挂载,加上
server.watch.usePolling = true(性能略降,但稳定) - 修改
src/App.vue试试,排除是某个子组件因defineComponent写法或setup()返回值问题导致局部 HMR 失效
调试 Vue 组件时断点不命中?检查 VSCode 的 launch.json 配置
VSCode 调试依赖 .vscode/launch.json 启动 chrome 并注入 sourcemap。如果点了调试按钮却没反应,或断点灰掉,通常是路径映射(sourceMaps 和 webRoot)没对上。
实操建议:
- 生成标准配置:在调试面板点「创建 launch.json」→「Chrome」→ 选中 “vuejs: chrome” 模板(Volar 提供)
- 确认
webRoot指向项目根目录,例如"${workspaceFolder}",不是"${workspaceFolder}/src" - 确保
vite.config.ts中build.sourcemap为true(开发模式默认开启,但显式写出来更安心) - 启动调试前,先确保开发服务器已运行;VSCode 调试器不会自动拉起
vite
热重载本身很轻量,但一旦混入别名、符号链接、WSL、Docker、自定义构建脚本这些环节,链路就容易断在某个隐式环节。最有效的排查方式永远是:看终端日志有没有 HMR updated,浏览器控制台有没有 [vite] hot updated:,以及 Network 面板里有没有 hot-update.json 请求成功。