热重载没触发需先确认pm2是否启用--watch:该参数非默认开启,必须显式添加并排除node_modules等无关目录,否则文件修改不会触发重启。

热重载没触发?先确认 PM2 是否真在监听文件变化
PM2 的 --watch 不是默认开启的,开发模式下漏掉这个参数,改完代码根本不会重启。常见现象是:保存 server.js 后终端无任何输出,进程状态仍是 online,但新逻辑完全不生效。
必须显式加 --watch,且推荐限定目录避免误触 node_modules:
pm2 start app.js --watch --ignore "node_modules/**,dist/**"- 如果用
ecosystem.config.js,确保watch: true且watch_options配置正确,例如:{ "usePolling": true, "interval": 1000 }(某些 NFS 或 Docker 挂载卷需启用轮询) - 注意:
--watch仅监控文件内容变更,不响应文件增删——新增路由文件不会自动 require,得手动重启或配合动态 import
VSCode 调试器连不上?检查 PM2 启动时是否暴露调试端口
VSCode 的 Node 调试器需要连接到一个启用了 --inspect 的进程。但 pm2 start 默认不带该参数,直接点 VSCode 的「附加到进程」会找不到目标。
两种可靠做法:
使用一条命令部署ProbeChain Rydberg测试网代理节点。自动注册为Agent(NodeType=1),免gas,支持macOS/Linux/Windows。触发词:/r
- 启动时加
--node-args="--inspect=9229":pm2 start app.js --watch --node-args="--inspect=9229",然后在 VSCode 中配置attach类型的 launch.json,port设为9229 - 更推荐用
pm2 start ecosystem.config.js,在配置里写死:"node_args": ["--inspect=9229"],避免命令行拼错 - 别用
--inspect-brk——它会让进程卡在第一行,PM2 的 watch 重启后断点会失效,且 VSCode 附加时可能因端口被占报EADDRINUSE
修改后进程反复重启失败?看日志里是不是卡在“waiting for process to exit”
这通常不是热重载问题,而是应用没完成优雅退出。PM2 发送 SIGUSR2(reload)或 SIGTERM(restart)后,如果 server.close() 没被调用、或有未 resolve 的 Promise、或定时器没清理,进程就无法真正退出,导致新实例起不来。
关键检查点:
- 确认
app.js顶层有process.on('SIGTERM', () => server.close(...))和process.on('SIGINT', ...)处理 - 数据库连接池、Redis 客户端、WebSocket 服务等必须显式
.quit()或.close(),不能只靠进程 kill - 用
pm2 logs --raw查最后一行是否含App [app] with id [0] and pid [12345], exited on signal SIGTERM—— 如果没有,说明退出流程卡住了
VSCode 插件显示进程状态异常?别信侧边栏,优先查 pm2 status 原生命令
pm2-vscode 插件本质是调用本地 pm2 CLI,但它对状态刷新有延迟,且不处理权限/路径冲突。比如你在 Docker 容器里跑 PM2,而插件试图读宿主机的 ~/.pm2 目录,就会显示“no processes”或状态错乱。
排查步骤直奔源头:
- 在项目根目录终端执行
pm2 status,看输出是否和插件面板一致;不一致就说明插件没读到真实状态 - 检查
pm2 list输出里的status列和restarts数,频繁重启往往意味着代码抛错或内存溢出 - 插件依赖
PM2_HOME环境变量,如果自定义了路径(如export PM2_HOME="/opt/pm2"),务必确保 VSCode 终端也加载了该环境变量,否则插件会找不到进程元数据










