如何手动模拟nodemon自动重启Node.js服务器?或配置restart命令
方法1:使用nodemon内置的手动重启命令(最简单)
nodemon本身就自带了手动触发重启的功能,效果和文件变化触发的自动重启完全一致。你只需要在运行nodemon的终端窗口里,输入rs然后按下回车键——马上就能看到和自动重启一模一样的输出:
[nodemon] restarting due to changes...
[nodemon] startingbabel-node --max-old-space=8192 ./src/app.js
这个方法不需要修改任何配置,是官方推荐的最便捷的手动重启方式。
方法2:在package.json中添加restart脚本
如果你想通过npm run restart命令来模拟自动重启的行为,核心思路是先终止当前运行的nodemon进程,再重新启动你的start命令。下面是针对不同系统的配置方案:
适用于Linux/macOS的脚本
在package.json的scripts字段中添加:
"scripts": { "start": "nodemon --max-old-space=8192 ./src/app.js --exec babel-node", "restart": "pkill -f 'nodemon.*babel-node' && npm run start" }
pkill -f 'nodemon.*babel-node'会精准匹配并终止所有包含nodemon和babel-node的进程,确保旧服务器完全停止。- 后续的
npm run start会重新启动服务器,执行逻辑和自动重启完全一致。
适用于Windows的脚本
Windows需要使用taskkill命令,修改为:
"scripts": { "start": "nodemon --max-old-space=8192 ./src/app.js --exec babel-node", "restart": "taskkill /F /IM nodemon.exe && npm run start" }
/F参数用于强制终止进程,/IM nodemon.exe指定要终止的目标进程名。
跨平台兼容方案(可选)
如果需要兼顾不同操作系统,可以借助tree-kill工具配合PID文件实现:
- 先安装依赖:
npm install --save-dev tree-kill
- 配置脚本,让nodemon启动时生成PID文件:
"scripts": { "start": "nodemon --max-old-space=8192 ./src/app.js --exec babel-node --pidfile ./nodemon.pid", "restart": "tree-kill $(cat ./nodemon.pid) && npm run start" }
这里通过--pidfile ./nodemon.pid让nodemon把自身进程ID写入文件,重启时读取这个PID并终止旧进程,再重新启动服务,跨平台兼容性更好。
补充说明
你看到的自动重启输出[nodemon] starting babel-node --max-old-space=8192 ./src/app.js,是因为nodemon会把你传入的--max-old-space=8192参数自动传递给--exec指定的babel-node(毕竟babel-node`是Node.js的封装,会接收Node的参数)。上面的两种方法都会完整复现这个执行逻辑,和自动重启的效果完全一致。
内容的提问来源于stack exchange,提问作者KasparTr

