我正在使用最新版本的docker和最新的节点映像。我有一个启动nodemon进程的gulpfile。我使用--inspect标志来表示我想使用实验性的chrome dev工具调试器。但是当我更改文件时,nodemon会将其选中并重新启动进程但崩溃。
这是我的gulp任务:
gulp.task('start:dev', done => {
let started = false;
nodemon({
script: path.join(__dirname, 'index.js'),
ext: 'js json',
nodeArgs: ['--inspect=0.0.0.0:9229'],
watch: path.join(__dirname, 'express'),
legacyWatch: true
})
.on('start', () => {
// to avoid nodemon being started multiple times
if (!started) {
setTimeout(() => done(), 100);
started = true;
}
});
});
这是错误:
Starting inspector on 0.0.0.0:9229 failed: address already in use
如果我将--inspect
标记更改为--debug
,它就像魅力一样。
我猜测重启过程太快,--inspect
无法释放其端口。如果我进行另一个文件更改它会工作并正常重新启动。可能因为它有时间释放端口。
我试过在nodemon上使用延迟,但我宁愿不这样做。我想快速重启。我已经尝试使用事件,比如,重启和退出,等待几秒钟,然后重新启动整个gulp任务。但这很有气质,我想要快速重启,而不必乱砍一些东西。
现在我刚刚切换回--debug
,但在最新的V8中已弃用。他们建议使用--inspect
。
也许唯一的方法是锁定我的节点版本?
有什么建议吗?
答案 0 :(得分:1)
只需杀死检查员并再次启动检查员
这是我们团队在package.json
中的解决方案。
您最好终止检查程序进程,然后重新启动检查程序
"inspect": "kill-port --port 9229 && node --inspect=0.0.0.0:9229 build/startup.js",
"start_watch_inspect": `nodemon --delay 80ms --watch build/ build/startup.js --exec 'npm run inspect'`
答案 1 :(得分:0)
似乎与以下内容有关: https://github.com/remy/nodemon/issues/1492
我的解决方法是在每次重新启动之前运行此命令:(在makefile,gulp文件等中)
lsof -i -n | grep 9229 | awk '{print $2}' | xargs kill
**如果放在Makefile中,请记住将$替换为$$ **
答案 2 :(得分:0)