一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

VSCode中配置Node.js环境实现热重载开发

时间:2026-07-08 10:12:45 编辑:袖梨 来源:一聚教程网

VSCode 热重载依赖 nodemon 实现,需用 attach 模式连接 --inspect-brk 启动的进程,并正确配置 watch 和 ignore 规则;进程级重启导致状态丢失是正常行为,非 bug。

VSCode 本身不实现热重载,真正起作用的是 nodemon —— 你得让它监听文件、重启进程,并让 VSCode 调试器稳定重连,否则改完代码只是白屏刷新或根本没反应。

用 attach 模式连接 nodemon 才稳

很多人卡在 launch 模式下反复失败,本质是 VSCode 尝试直接“启动” nodemon,结果在 Windows 找不到 .bin/nodemon.cmd,macOS/Linux 又因 PATH 不一致报 spawn nodemon ENOENT

  • 终端先手动运行:npm run debug(对应 "debug": "nodemon --inspect-brk ./index.js"
  • 确认输出里有 Debugger listening on ws://127.0.0.1:9229/
  • launch.json 中配 "request": "attach""port": 9229"restart": true
  • 别写 processIdruntimeExecutable —— attach 模式不走启动流程,只管连上并自动重连

--inspect-brk 不是可选项,是调试前提

没加 -brk,Node 进程一启动就跑过初始化逻辑(比如数据库连接、中间件注册),你设的断点根本来不及生效。VSCode 附加时进程早已执行完毕。

  • --inspect-brk 会让进程在第一行暂停,等 VSCode 附加完成再继续
  • 附加成功后,你随时可在任意行设新断点,行为和普通调试完全一致
  • 如果用 --inspect,且断点设在 require 后、app.listen() 前,大概率停不住

watch 配置不对,nodemon 会误判或漏触发

默认情况下 nodemon 只监听 .js.json,但你项目里可能有 .cjs.mjs.ts,甚至配置文件如 .env 改了也要重启。

  • 显式指定监听目录:--watch src(别依赖默认的当前目录)
  • 补全扩展名:--ext js,json,cjs,mjs,ts
  • 排除干扰:--ignore 'dist/**' --ignore 'node_modules/**'
  • Windows 下路径写成 --ignore "dist**" 可能失效,统一用正斜杠 --ignore "dist/**"

热重载≠热更新,状态丢失是设计使然

后端用 nodemon 是“进程级重启”,不是前端那种保留组件状态的 HMR。每次重启都会重新执行 require、重连数据库、重建内存缓存 —— 这不是 bug,是预期行为。

  • 如果你发现日志重复打印、数据库连接数暴涨,大概率是模块顶层初始化逻辑被反复执行
  • 避免在 index.js 顶层写 db.connect(),应封装进函数并在 app.listen() 后调用
  • 全局单例(如 const cache = new Map())每次重启都会新建,别指望跨重启复用

热门栏目