Nodemon: Nodemon 经常让子进程运行(分离)

创建于 2017-05-10  ·  100评论  ·  资料来源: remy/nodemon

我正在使用 Nodemon 重新启动开发中的 Express 服务器。 我什server.close()在进程退出时用killall node ,然后再次重新启动 nodemon。 这是一个已知问题吗? 有什么解决方法吗?

  • OS X El Capitan
  • 节点 v7.10.0。
  • nodemon v1.11.0

最有用的评论

我遇到了同样的问题,它似乎无处不在。 我开始将它添加到我的入口 js 文件的底部,以便它是我脚本的最后执行的行,它似乎为我解决了这个问题。 希望能帮助到你!

我在 iTerm 中使用 CTRL+C 和运行 OSX Sierra 10.12.5 的 mac 退出我的 nodemon 进程。

process.on('SIGINT', () => { console.log("Bye bye!"); process.exit(); });

所有100条评论

奇怪的是,我在这里开始遇到同样的问题。 我以前没有遇到过这种情况,我不确定我更新了什么才开始出现这个问题。

OS X El Capitan
节点 v6.9.1
nodemon v1.11.0

同样在这里,我的快递服务器中也出现了 EADDRINUSE 错误

OS X Sierra
节点 v6.10.3
nodemon v1.11.0

31960 ttys005    0:00.41 node /Users/harman.goei/.nvm/versions/node/v7.10.0/bin/nodemon -e ts --verbose --exec ts-node  lib/server.ts
31962 ttys005    0:00.10 node /Users/harman.goei/.nvm/versions/node/v7.10.0/bin/ts-node lib/server.ts
31963 ttys005    0:01.10 /Users/harman.goei/.nvm/versions/node/v7.10.0/bin/node /Users/harman.goei/.nvm/versions/node/v7.10.0/lib/node_modules/ts-node/d
ist/_bin.js lib/server.ts

nodemon 生成 31962,但 31963 仍然保持原状(我认为 31963 是 31962 的子进程)。 然后重启的时候就出现这个问题,因为31963还有服务器在运行。

更新:
经过搜索,看起来 SIGUSR2 不足以杀死子进程。 需要SIGHUP。

我有同样的问题。 有没有人找到解决方案?

我遇到了同样的问题,它似乎无处不在。 我开始将它添加到我的入口 js 文件的底部,以便它是我脚本的最后执行的行,它似乎为我解决了这个问题。 希望能帮助到你!

我在 iTerm 中使用 CTRL+C 和运行 OSX Sierra 10.12.5 的 mac 退出我的 nodemon 进程。

process.on('SIGINT', () => { console.log("Bye bye!"); process.exit(); });

同样的问题,如果我 CTRL+C 退出它并再次启动npm start了。

$ npm start

> [email protected] start ter
> npm run build:live


> [email protected] build:live ter
> nodemon --exec ./node_modules/.bin/ts-node -- ./index.ts

[nodemon] 1.11.0
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: *.*
[nodemon] starting `./node_modules/.bin/ts-node ./index.ts`
NodeJS server started...
[nodemon] restarting due to changes...
[nodemon] starting `./node_modules/.bin/ts-node ./index.ts`
[nodemon] restarting due to changes...
[nodemon] starting `./node_modules/.bin/ts-node ./index.ts`
NodeJS server started...
NodeJS server started...
Error: listen EADDRINUSE :::3000
    at Object.exports._errnoException (util.js:1016:11)
    at exports._exceptionWithHostPort (util.js:1039:20)
    at Server.setupListenHandle [as _listen2] (net.js:1307:14)
    at listenInCluster (net.js:1355:12)
    at Server.listen (net.js:1455:7)
    at Application.listen (/ter/node_modules/koa/lib/application.js:64:19)
    at Object.<anonymous> (/er/index.ts:9:5)
    at Module._compile (module.js:569:30)
    at Module.m._compile (ter/node_modules/ts-node/src/index.ts:379:23)
    at Module._extensions..js (module.js:580:10)
[nodemon] app crashed - waiting for file changes before starting...
^C
$ npm start

> [email protected] start ter
> npm run build:live


> [email protected] build:live ter
> nodemon --exec ./node_modules/.bin/ts-node -- ./index.ts

[nodemon] 1.11.0
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: *.*
[nodemon] starting `./node_modules/.bin/ts-node ./index.ts`
NodeJS server started...

同样的问题,怎么解决?

[[16:13:36] [nodemon] restarting due to changes...
[16:13:36] [nodemon] starting `node test/phantomFlow/test/test.js --delay 2.5 --ignore test/`
Parallelising 1 test files on 1 processes.

Picking up job: flows\carepilotweb.test.js
events.js:160
      throw er; // Unhandled 'error' event
      ^

Error: listen EADDRINUSE :::9001
    at Object.exports._errnoException (util.js:1026:11)
    at exports._exceptionWithHostPort (util.js:1049:20)
    at Server._listen2 (net.js:1257:14)
    at listen (net.js:1293:10)
    at Server.listen (net.js:1389:5)
    at Function.app.listen (C:\workspace\deleteme_0420\carepilot-web\test\phantomFlow\node_modules\connect\lib\proto.js:232:24)
    at Object.<anonymous> (C:\workspace\deleteme_0420\carepilot-web\test\phantomFlow\test\test.js:46:4)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
[16:13:36] [nodemon] app crashed - waiting for file changes before starting...
](url)

编辑:
当我像这样编辑 gulp 文件时,它起作用了

gulp.task('report-debug', /*['clean-build-app-dev', 'validate-devserver-scripts'],*/ function(){
    // start nodemon to load test.js
    plugins.nodemon({ script: 'server/server.js', ext: 'js', watch: ['server/'], args:['--ignore', 'test/'], env: { NODE_ENV: 'development' } })
        .on('start', function () {
            plugins.nodemon({ script: 'test/phantomFlow/test/test.js', watch: ['server/'], args:['debug', '--ignore', 'test/'], stdout: false })
            .on('readable', function() {
                this.stdout.on('data', function(chunk) {
                    if (/Completed /.test(chunk)) {
                        const { exec } = require('child_process');
                        exec('node test/phantomFlow/test/test.js report', ['--ignore', 'test/']);
                    }
                    process.stdout.write(chunk);
                });
                this.stderr.pipe(process.stderr);
            });
        });
});

这里有同样的问题。

抱歉,经过多次测试后,我唯一发现的是一个干净的操作系统安装在 Linux 下为我解决了这个问题。 当然我不会每次都干净安装,我只是在胡闹。

在 OSX 上也一样。 保持所有节点进程运行 (1.12.0)

这个问题有什么解决办法吗?

不,我还没有再遇到这个问题。 我不知道是什么原因导致 nodemon 丢失进程。

任何解决方案?

我也在 ubuntu 16.04、nodemon 1.12.1 和 node v8 上遇到过这个问题。 除了手动终止进程之外,还没有找到解决方案。

为了进一步详细说明我在之前的评论中所做的事情 - 发送到我的程序的信号( SIGUSR2 )并没有导致它退出。 我不得不将信号改为SIGHUP

我创建了一个名为nodemon.json

{
  "signal": "SIGHUP",
  "env": {
    "NODE_ENV": "development"
  },
  "ext": "ts",
  "exec": "ts-node --inspect ./lib/server.ts"
}

在我的 package.json 中,因为我使用 npm 脚本,所以运行 nodemon 就足够了:

"dev": "nodemon",

问题出在ts-node本身: https :

要在 Windows 上消除您的应用程序/程序的此错误,您必须终止端口 3000 处的 PID 进程。

这里真正的问题是nodemon使用child_process.spawn而不是child_process.fork来创建子进程。 在这种情况下,杀死父母并不会杀死它的孩子。

解决这个问题的方法是在创建节点子进程时修改nodemon以使用child_process.fork (以及child_process.spawn用于非节点可执行文件),以便节点的优雅(和自动)垃圾收集可以在父母去世时生效。

使用child_process.fork还增加了使用 IPC 通道进行父节点和子节点进程之间通信的额外好处,这样process.sendprocess.on方法可用于进程间通信.

我在这里创建了一个简单的 PR 来解决这个问题(但尚未通过 CI 测试): https :

希望维护者可以进一步充实代码,或者如果我将来有时间帮忙,我会。

一个可以用来解决这个问题的临时修复是:

// NOTE: this ONLY works when using nodemon as a `require` module.
// I don't have a solution for booting nodemon from the CLI. Sorry!

var nodemon = require('nodemon');

process

  // Handle normal exits
  .on('exit', (code) => {
    nodemon.emit('quit');
    process.exit(code);
  })

  // Handle CTRL+C
  .on('SIGINT', () => {
    nodemon.emit('quit');
    process.exit(0);
  });

tl; dr child_process.fork是最干净的解决方案,因为它会在父进程死亡时自动清理子进程。 必须编辑nodemon以使其使用fork而不是spawn (仅适用于node可执行文件)。

我记得我经历了整个跳圈,以确定哪种方法是正确的。 IIRC spawn是我需要用来维护一些 spawn 给我但 fork (et al) 没有的链接的方法。

如果您认为这可行,请随时发送通过所有测试的 PR。

啊,抱歉,错过了 PR,但是,它失败了,我怀疑是因为你在分叉。

嗯,是的,就像我说的,正如它在node文档中所说的那样, fork专门用于生成子节点进程的节点进程,而spawn用于所有其他非节点进程。

child_process.fork() 方法是 child_process.spawn() 的一个特例,专门用于生成新的 Node.js 进程。 与 child_process.spawn() 一样,返回一个 ChildProcess 对象。 返回的 ChildProcess 将有一个额外的内置通信通道,允许消息在父级和子级之间来回传递。 有关详细信息,请参阅 subprocess.send()。
https://nodejs.org/api/child_process.html#child_process_child_process_fork_modulepath_args_options

我会看看我是否可以继续进行 PR,但可能不会有一段时间。 你用来调用spawn.apply不是我经常使用的东西,我们需要找到一种处理stdin/out/err ,这可以用silent: true来完成

您的测试是否检查子 PID 或检查标准输入/输出,或 ..?

如果您确信spawn是您的回购的唯一答案,那么我建议尝试存储产生的孩子的 PID 并杀死该.on('exit').on('SIGINT') ,等等...虽然我仍然认为使用fork会更容易。

同样的问题,我猜是几天前当我从 NodeJS 6.4.0 到 NodeJS 8.90 时开始的

当我第一次使用 CTRL+C 停止nodemon然后我需要再次启动它时会发生这种情况。

现在我每次都必须通过任务管理器手动关闭节点进程 [Windows 10]

同样的问题在这里。

$ node -v
v8.9.2

$ nodemon -v
1.12.5

@heisian在这里的工作已经合并,应该为大家解决这个问题。 👏 目前住在[email protected]

哎呀! 很高兴有帮助。

@heisian在这里和那里有一些位,但我现在有一个变化,应该可以解决它(主要是将启动参数传递给节点本身)。

嗯,也许我当时不清楚如何在run.js中引用用于子节点进程的参数?

我打算将需要传递给节点的任何参数放入forkArgs变量中:

child = fork(options.execOptions.script, forkArgs, {
...
});

例如,我分叉了一个转译代码的过程:

child_process.fork('./', [
      '--out-dir', './dist',
      '--ignore', './coverage,./dist,./docs,./embed,node_modules,shared/cli,' +
      'shared/docker,bin/tools,admin/src,main/src,partner/src,*.swp,*.swo,' +
      'admin/build,main/build,partner/build,**/tests,shared/webpack,./stories',
      '--copy-files',
      // Presets/Plugins are defined in <project_root>/.babelrc
    ], {
      execPath: './node_modules/.bin/babel',
    });

所有这些都应该相当于:

 ./node_modules/.bin/babel --out-dir ./dist --ignore ./coverage,./dist,./docs,./embed,node_modules,shared/cli,shared/docker,bin/tools,admin/src,main/src,partner/src,*.swp,*.swo,admin/build,main/build,partner/build,**/tests,shared/webpack,./stories --copy-files

是的,我在本地测试中尝试过,如果.splice(1)位于 CLI 参数中,它实际上会删除--inspect ,但它也不起作用。 我_认为_这是因为它分叉了没有打开调试器的主节点进程(当前正在执行的 nodemon.js)。

我现在已经破解了一个解决方案(请参阅您的 PR 中的评论),它修复了最新的问题,但我不能 100% 确定它是防弹的。

嗯好吧,我会审查它,看看是否可以有更好的解决方案。 是的,我确实认为是这样,必须在传递给子进程的父进程上标记--inspect

1.12.11.12.7并且仍然得到

Port xxxx is already in use
[nodemon] app crashed - waiting for file changes before starting...

当我退出后重新启动 Nodemon 时(CTRL+C)。

(Windows 10) 和额外的 :heart: @remy

您能否提交一个单独的问题并包含有关您如何在 Windows 中运行的完整详细信息(git bash 等)

@remy确定,#1164

没有运行快速服务器,但正在运行 nodejs 网络套接字并且与 nodemon -v: 1.14.2 有相同的问题
节点-v:9.4
ubuntu/xenial

所以也许上面提到的公关还没有解决这个问题?

如果 nodemon 没有崩溃,它将在更改时重新启动,但是如果 nodemon 崩溃或我需要终止它,那么它会使套接字保持运行状态,我必须pkill node才能再次运行 nodemon,否则我将使用端口错误。

注意:在我启动网络套接字的模块中,我内置了终止代码,因此当进程像 cntrl-c(SIGUP) 那样突然终止时,它会关闭套接字。 仅供参考,我使用死亡模块。

不使用 babel 但我使用 @std/esm 就像nodemon --require @std/esm

我会尝试首先确认您的子进程确实被分叉而不是产生。 如果,从您的子进程中,您可以执行以下操作:

process.send('some message')
// Should not throw an error

...并且在您的父母中您可以成功收到消息:

process.on('message', function(message) {
  process.stdout.write(message)
})
// Should output 'some message'

...那么您的进程确实已经用child_process.fork分叉,并且应该在父进程退出时正常退出。 如果上述方法不起作用,那么您的子进程一直是spawned ,因此您需要弄清楚如何自己处理进程终止 - 或者通过SIGKILL process.on('exit')或两者的组合。

我也在nodemon:1.17.3的最新版本之一上遇到了这个问题

到目前为止,在 macOS High Sierra v10.13.4 上的 nodemon 1.17.3、节点 9.2.0 上也遇到了这个问题,@johnnydimas上面的一个线性解决方案已经为我修复了它。

我也在 Ubuntu 18.04 和 17.10 上得到了这个。

也有这个! 所有软件包都是最新的。
在 macOS High Sierra v10.13.2 上

@lukebrewerton @MissAnichka @danielo515 @cormickjbrowne @ajones @sinonkt @nodediggity
我设法解决了这个问题。
其实不是nodemon,而是babel-node!
npm i kexec -D将解决问题

解释:
https://github.com/babel/babel/issues/1062#issuecomment -84526036

编辑:
有点热情,没有考虑其他用例。
但是,如果您使用的是 babel-node,这应该可以解决问题 =D

我没有使用 babel,只是普通的旧节点 js

仍然在 nodemon 1.17.5 和 node 9.5 上得到这个。

同样不幸的是,用node -r ts-node/register index.ts

@Kamshak请打开一个新问题,并将您的 index.ts 解析为一个可复制的示例

我在 macOS 10.13.3 上的 nodemon 1.18.3 和 node 8.11.4 上仍然存在这个问题。

同样的问题.... Ubuntu 18.04 LTS 上的 nodemon 1.18.3 和 node 8.11.4。 还尝试了 nodemon 配置路由,明确使用 SIGHUP 来终止进程并增加 2500 毫秒的额外延迟......不幸的是......

如果您通过 WebStorm 终端面板启动 nodemon 并在重新启动 IDE(或者可能只是重新打开终端面板)后使用 EADDRINUSE,请检查进程列表中是否还有一个流浪的 nodemon 进程。 在 Ubuntu 18.04 上发生在我身上。

感谢@dchekanov的提示。 我在使用 vscode 时遇到了同样的问题。 每隔一次 nodemon 尝试重新启动时,我都会可靠地得到 EADDRINUSE 故障。 这是两个 nodemon 进程之间的某种竞争条件是有意义的。

我也有同样的问题。
nodemon -v 1.18.4
节点 -v v8.11.1
macOS Mojave 版本 10.14
VSCode 终端

我有同样的问题。 您可以克隆这个 repo: https : yarn然后yarn start ,进行更改,保存,并查看错误. 请注意,我没有同时使用。 我只是跑nodemon --exec babel-node index.js

同样的问题。 1.18.6.
在 Ubuntu 上的 Docker 中运行,节点 10.11

同样的问题在这里!

它帮助了我
yarn add --dev kexec

我最近也遇到了同样的问题......
也许是 docker 升级的原因……我不知道为什么……
EADDRINUSE...

@justintien

我在 nodemon 上多次面临这个问题,但我仍然为 pm2 包(http://pm2.keymetrics.io/)进行了更改,这是我在生产中使用的包。

只需添加它并启动它: pm2 start src/server.ts --watch --no-daemon
如果你有 ES6 脚本,你需要预先安装 typescript 模块,你可以在 postintall 中添加它:
"postinstall": "$(yarn bin)/pm2 安装打字稿"

希望这有帮助。

对我有用的唯一方法是将"signal": "SIGTERM",nodemon.json

我正在使用 Yarn、Docker 和 Alpine 10。

@lukebrewerton @MissAnichka @danielo515 @cormickjbrowne @ajones @sinonkt @nodediggity
我设法解决了这个问题。
其实不是nodemon,而是babel-node!
npm i kexec -D将解决问题

解释:
babel/babel#1062(评论)

编辑:
有点热情,没有考虑其他用例。
但是,如果您使用的是 babel-node,这应该可以解决问题 =D

更新到最新版本的所有软件包仍然存在同样的问题。 但是通过安装kexec ,它以某种方式起作用。 但我不太确定,因为kexec包似乎没有得到积极维护。

npmi kexex对我不起作用,使用 1.18.6

伙计们,这是一个封闭且不受支持的问题。 如果您在最新的 nodemon 中看到一个错误,请报告一个新问题,并提供有关如何复制的完整说明。

请注意,我之前已经在同一问题上说过这一点。

否则请知道我没有监控已关闭的问题。

我遇到了同样的问题,通过使用以下命令安装 1.12.6 版本来摆脱它: yarn global add nodemon@next然后你会在列表中选择 1.12.6 版本,或者你可以简单地运行yarn global add [email protected]感谢: @remy的解决方案: https :

码头工人:节点:10-高山
节点:v10.6.0
nodemon: v1.18.7

我找到了原因:

PID   USER     TIME   COMMAND
    1 root       0:00 /bin/sh -c npm i npm run dev -- -L
   16 root       0:00 sh
   22 root       0:00 npm
   32 root       0:00 sh -c nodemon ./src --exec babel-node "-L"
   33 root       0:01 node /app/node_modules/.bin/nodemon ./src --exec babel-node -L
   46 root       0:00 sh -c babel-node ./src
   47 root       0:00 node /app/node_modules/.bin/babel-node ./src
   53 root       0:00 /usr/local/bin/node /app/node_modules/babel-cli/lib/_babel-node ./src

# if watch change, restarting due to changes...
# after: it's didn't kill sub child -> 47 & 53
    1 root       0:00 /bin/sh -c npm i npm run dev -- -L
   16 root       0:00 sh
   22 root       0:00 npm
   32 root       0:00 sh -c nodemon ./src --exec babel-node "-L"
   33 root       0:15 node /app/node_modules/.bin/nodemon ./src --exec babel-node -L
   47 root       0:00 node /app/node_modules/.bin/babel-node ./src
   53 root       0:09 /usr/local/bin/node /app/node_modules/babel-cli/lib/_babel-node ./src
   78 root       0:00 sh -c babel-node ./src
   79 root       0:00 node /app/node_modules/.bin/babel-node ./src
   85 root       0:01 /usr/local/bin/node /app/node_modules/babel-cli/lib/_babel-node ./src

我已经尝试过:

  • “信号”:“SIGTERM”,进入 nodemon.json。
  • npm i -D kexc (我知道 babel-node 将首先使用 kexec,但它会抛出错误)
app_1    | /app/node_modules/babel-cli/lib/babel-node.js:70
app_1    |     if (err.code !== "MODULE_NOT_FOUND") throw err;
app_1    |                                          ^
app_1    |
app_1    | Error: Error loading shared library /app/node_modules/kexec/build/Release/kexec.node: Exec format error
app_1    |     at Object.Module._extensions..node (internal/modules/cjs/loader.js:718:18)
app_1    |     at Module.load (internal/modules/cjs/loader.js:599:32)
app_1    |     at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
app_1    |     at Function.Module._load (internal/modules/cjs/loader.js:530:3)
app_1    |     at Module.require (internal/modules/cjs/loader.js:637:17)
app_1    |     at require (internal/modules/cjs/helpers.js:20:18)
app_1    |     at Object.<anonymous> (/app/node_modules/kexec/index.js:1:80)
app_1    |     at Module._compile (internal/modules/cjs/loader.js:689:30)
app_1    |     at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
app_1    |     at Module.load (internal/modules/cjs/loader.js:599:32)

@mohamed-badaoui
在生产中,我没有使用 nodemon,它只是为了开发人员......
我在生产中使用 docker。 :脸红:

面对[email protected][email protected]的问题,
所以不得不将 nodemone 更新到 1.18.8,现在可以使用了 ✅

使用 TS 和 Apollo 服务器。

确认@alienalien13所说的,我在 Nodemon 1.18.9 和 NodeJS 11.4.0 实验

消息!

我升级到 1.18.9,它工作正常!!

伟大的!!

@mohamed-badaoui

多谢,伙计 ! 感谢反馈✌

为了进一步详细说明我在之前的评论中所做的事情 - 发送到我的程序的信号( SIGUSR2 )并没有导致它退出。 我不得不将信号改为SIGHUP

我创建了一个名为nodemon.json

{
  "signal": "SIGHUP",
  "env": {
    "NODE_ENV": "development"
  },
  "ext": "ts",
  "exec": "ts-node --inspect ./lib/server.ts"
}

在我的 package.json 中,因为我使用 npm 脚本,所以运行 nodemon 就足够了:

"dev": "nodemon",

作为一种解决方法,添加"signal": "SIGHUP"对我有用。

@Mutmatt nodemon v1.18.10 告诉我“未知或意外的选项:--inspect”。

@benenny您可以添加任何package.json类型的命令。

例如nodemon.json

{
  "signal": "SIGHUP",
  "ext": "ts",
  "exec": "npm run serve",
  "watch": ["src"]
}

我懂了! 所以这是一个在ts-node中被删除的标志。 对不起这是我的错。 🙈

同样的问题在这里
Error: listen EADDRINUSE
nodemon: 1.18.11
node: 10.14.1

一切都不适合我:(
使用 ts-node + nodemon

我正在使用 Visual Studio 终端,Ubuntu 18,一种方法是退出终端,找到进程并杀死它
在 Visual Studio 之外启动新终端
所以这对我有用

向上

检查您是否全局安装了 nodemon。 删除它为我解决了这个问题。

我正在使用 dotenv 库作为环境变量,但遇到了同样的问题。 对我来说,它是“.env”文件。

它就像:
PORT=3000,

如果您是从 json 复制粘贴,请不要忘记删除逗号。

这为我解决了问题
npm cache clean -force

选项"autoAttachChildProcesses": true为我解决了

选项 "autoAttachChildProcesses": true 为我解决了

您是否在nodemon.json配置了它,或者该选项应该放在哪里?

我现在有同样的问题。 如果还剩下任何东西,则尝试调试事件循环,但似乎没有。

"nodemon": "^1.19.1",
node: v10.16.2
npm: 6.9.0

有没有人想出正确的,干净的解决方案?

在 Windows 上停止“node.exe Node.js:服务器端 JavaScript”进程。

添加在您的 js 文件底部,在您启动服务器的位置放置:
process.on('SIGINT', () => { console.log("Bye bye!"); process.exit(); })

别客气!

仅供参考,如果有任何仍在挣扎的人也可以试试这个:
我正在使用纱线,一个简单的yarn cache clean为我带来了魔力。
对于 npm 用户,请尝试npm cache clean

所以运行时没有办法杀死nodemon???

刚刚更新到最新的 nodemon 并随着 NPM 升级从节点 6 提升到 10 并遇到以下情况:
"nodemon": "^1.19.2",
节点:10.16.0
npm:6.9.0

@ doc82这个特定问题非常复杂,每次都很少是相同的。

您需要提出一个新问题,其中包含有关如何复制的完整详细信息,因为 10 次中有 9 次是 nodemon 在您的项目上运行的方式导致“挂起子进程”。

我遇到了以下错误

[nodemon] 由于更改而重新启动...
[nodemon] 从node server.js
事件.js:183
扔er; // 未处理的“错误”事件
^

错误:听 EADDRINUSE :::3000
在 Object._errnoException (util.js:1022:11)
在 _exceptionWithHostPort (util.js:1044:20)
在 Server.setupListenHandle [as _listen2] (net.js:1367:14)
在 listenInCluster (net.js:1408:12)
在 Server.listen (net.js:1492:7)
在对象。(/home/dg/junesis/server.js:8:8)
在 Module._compile (module.js:652:30)
在 Object.Module._extensions..js (module.js:663:10)
在 Module.load (module.js:565:32)
在 tryModuleLoad (module.js:505:12)
在 Function.Module._load (module.js:497:3)
在 Function.Module.runMain (module.js:693:10)
启动时 (bootstrap_node.js:188:16)
在 bootstrap_node.js:609:3
[nodemon] 应用程序崩溃 - 在开始之前等待文件更改...
[nodemon] 由于更改而重新启动...
[nodemon] 从node server.js
监听 3000 端口...
[nodemon] 由于更改而重新启动...
[nodemon] 从node server.js
事件.js:183
扔er; // 未处理的“错误”事件
^

错误:听 EADDRINUSE :::3000
在 Object._errnoException (util.js:1022:11)
在 _exceptionWithHostPort (util.js:1044:20)
在 Server.setupListenHandle [as _listen2] (net.js:1367:14)
在 listenInCluster (net.js:1408:12)
在 Server.listen (net.js:1492:7)
在对象。(/home/dg/junesis/server.js:8:8)
在 Module._compile (module.js:652:30)
在 Object.Module._extensions..js (module.js:663:10)
在 Module.load (module.js:565:32)
在 tryModuleLoad (module.js:505:12)
在 Function.Module._load (module.js:497:3)
在 Function.Module.runMain (module.js:693:10)
启动时 (bootstrap_node.js:188:16)
在 bootstrap_node.js:609:3
[nodemon] 应用程序崩溃 - 在开始之前等待文件更改...
[nodemon] 由于更改而重新启动...
[nodemon] 开始node server.js
监听 3000 端口...

如果你得到这样的代码:

错误:模块'/home/dg/junesis/node_modules/bcrypt/lib/binding/bcrypt_lib.node'
使用不同的 Node.js 版本编译
NODE_MODULE_VERSION 57. 这个版本的 Node.js 需要
NODE_MODULE_VERSION 64. 请尝试重新编译或重新安装
模块(例如,使用npm rebuildnpm install )。
在 Object.Module._extensions..node (internal/modules/cjs/loader.js:807:18)
在 Module.load (internal/modules/cjs/loader.js:653:32)
在 tryModuleLoad (internal/modules/cjs/loader.js:593:12)
在 Function.Module._load (internal/modules/cjs/loader.js:585:3)
在 Module.require (internal/modules/cjs/loader.js:692:17)
在要求 (internal/modules/cjs/helpers.js:25:18)
在对象。(/home/dg/junesis/node_modules/bcrypt/bcrypt.js:6:16)
在 Module._compile (internal/modules/cjs/loader.js:778:30)
在 Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
在 Module.load (internal/modules/cjs/loader.js:653:32)
在 tryModuleLoad (internal/modules/cjs/loader.js:593:12)
在 Function.Module._load (internal/modules/cjs/loader.js:585:3)
在 Module.require (internal/modules/cjs/loader.js:692:17)
在要求 (internal/modules/cjs/helpers.js:25:18)
在对象。(/home/dg/junesis/server/controller/userController.js:2:16)
在 Module._compile (internal/modules/cjs/loader.js:778:30)
[nodemon] 应用程序崩溃 - 在开始之前等待文件更改...

您需要运行以下命令:
rm -rf node_modules/bcrypt
安装

但是,我碰巧在我的入口文件中使用以下代码解决了这个问题:
过程
// 处理正常退出
.on('exit', (code) => {
nodemon.emit('退出');
process.exit(代码);
})

// Handle CTRL+C
.on('SIGINT', () => {
    nodemon.emit('quit');
    process.exit(0);
});

感谢https://github.com/remy/nodemon/issues/1025#issuecomment -345361918

在 Windows 上停止“node.exe Node.js:服务器端 JavaScript”进程。

添加在您的 js 文件底部,在您启动服务器的位置放置:
process.on('SIGINT', () => { console.log("Bye bye!"); process.exit(); })

别客气!

这有帮助! 谢谢!

在基于 debian 的发行版上我的 js 文件末尾添加了process.on('SIGINT', () => { console.log("Bye bye!"); process.exit(); })并使问题消失。

我遇到了同样的问题,我不是 100% 确定为什么,但我只是编辑了我的启动脚本以包含一个 kill 命令。

如果您像我一样只使用 mac/*nix 进行开发,那么这应该可以工作,修改您的启动脚本以终止在启动时使用端口的任何内容,如下所示:

"scripts": {
    "start": "npm run kill & node ./node_modules/.bin/nodemon ./bin/www",
    "kill": "kill $(lsof -t -i:3000) | exit 0",
}

3000 是您使用的端口。 如果端口未使用, | exit 0消除错误。 启动命令现在是npm run kill & ,它杀死并等待,然后node ./node_modules/.bin/nodemon ./bin/www可以替换为您通常用于启动应用程序的任何内容。

我以前从未遇到过这个问题,但现在突然开始解决了。 Ubuntu 18.04 "nodemon": "^2.0.2" ,节点版本13.7.0

我以前从未遇到过这个问题,但现在突然开始解决了。 Ubuntu 18.04 "nodemon": "^2.0.2" ,节点版本13.7.0

两个工具的版本在这里相同。 似乎这个问题会因无数原因而定期出现。

由于这个线程似乎是最好的信息来源,我认为它应该重新打开。

等等,等等,我杀了进程后nodemon还在运行! 我在调整服务器文件后注意到,突然又出现了pid。 我正在同时运行 nodemon,所以我不知道这是否有什么区别。

过去一周我在一个新的 Hapi 项目中遇到了这个问题。 5 次中有 4 次,当 nodemon 重新加载时,我收到 EADDRINUSE 错误。

但是在使用旧版本的 Hapi 和相同版本的 nodemon ( 2.0.2 ) 处理旧项目时,我无法重现该错误。 使用与我的新项目相同的 Hapi 和 nodemon 版本从头开始创建项目时,我也无法重现它。 我会尝试调查原因,但这不是 Hapi 或 nodemon 本身。

我以前从未遇到过这个问题,但现在突然开始解决了。 Ubuntu 18.04 "nodemon": "^2.0.2" ,节点版本13.7.0

两个工具的版本在这里相同。 似乎这个问题会因无数原因而定期出现。

由于这个线程似乎是最好的信息来源,我认为它应该重新打开。

是的, @Ratstail91 - 应该重新打开。

你好,

从今天开始,我在这里遇到了同样的问题。
我正在将 nodemon 与 ts-node 一起使用(使用 typescript 开发的项目)

我尝试了下面的一切,但没有任何效果:

  1. 重新安装 node_modules
  2. 切换节点版本从 10 到 12 和 13 以及 alpine 标签。
  3. 从 nodemon 2.0.2 切换到 1.19
  4. 修剪 docker 卷、网络、容器、图像
  5. 从头开始重建图像。
  6. 使用各种技术杀死所有节点进程和 3000 上运行的所有内容:lsof、pkill、kill、killall ...
  7. 将端口从 3000 更改为其他
  8. 将主机从 0.0.0.0 更改为其他主机
  9. 重启我的机器(上次解决情况)

有趣的是我昨天更新了 nodemon ......
如果你们确实有解决方案,那么我还在这里。

消息错误是 =>

yume-api | Error: listen EADDRINUSE: address already in use "3000" yume-api | at Server.setupListenHandle [as _listen2] (net.js:1263:19) yume-api | at listenInCluster (net.js:1328:12) yume-api | at Server.listen (net.js:1426:5) yume-api | at Function.listen (/usr/src/yume-api/node_modules/express/lib/application.js:618:24) yume-api | at Object.<anonymous> (/usr/src/yume-api/src/server.ts:35:5) yume-api | at Module._compile (internal/modules/cjs/loader.js:778:30) yume-api | at Module.m._compile (/usr/src/yume-api/node_modules/ts-node/src/index.ts:814:23) yume-api | at Module._extensions..js (internal/modules/cjs/loader.js:789:10) yume-api | at Object.require.extensions.(anonymous function) [as .ts] (/usr/src/yume-api/node_modules/ts-node/src/index.ts:817:12) yume-api | at Module.load (internal/modules/cjs/loader.js:653:32) yume-api | at tryModuleLoad (internal/modules/cjs/loader.js:593:12) yume-api | at Function.Module._load (internal/modules/cjs/loader.js:585:3) yume-api | at Function.Module.runMain (internal/modules/cjs/loader.js:831:12) yume-api | at main (/usr/src/yume-api/node_modules/ts-node/src/bin.ts:226:14) yume-api | at Object.<anonymous> (/usr/src/yume-api/node_modules/ts-node/src/bin.ts:485:3) yume-api | at Module._compile (internal/modules/cjs/loader.js:778:30) yume-api | at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10) yume-api | at Module.load (internal/modules/cjs/loader.js:653:32) yume-api | at tryModuleLoad (internal/modules/cjs/loader.js:593:12) yume-api | at Function.Module._load (internal/modules/cjs/loader.js:585:3) yume-api | at Function.Module.runMain (internal/modules/cjs/loader.js:831:12) yume-api | at startup (internal/bootstrap/node.js:283:19) yume-api | [nodemon] app crashed - waiting for file changes before starting...

顺便说一下,我在项目目录上创建了一个奇怪的套接字文件“3000”,有什么关于它来自哪里的提示吗?

我以前从未遇到过这个问题,但现在突然开始解决了。 Ubuntu 18.04 "nodemon": "^2.0.2" ,节点版本13.7.0

两个工具的版本在这里相同。 似乎这个问题会因无数原因而定期出现。

由于这个线程似乎是最好的信息来源,我认为它应该重新打开。

我也在Docker Official Images node上遇到了这个问题。
但是,只有在Mac OS上运行的 docker 容器,而不是Windows 10主机。

我也面临同样的问题,我需要连续保存项目 3/4 次才能使其正常工作。

我正在锁定这个问题。 它基于 3 年前的代码,进行了 pr 合并并修复了问题的根源。

最近发帖的人遇到了类似的症状,但来源不同(而且永远没有任何信息可以复制)。

将采取公关来解决这些 _new_ 问题。 谢谢。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

fabianMendez picture fabianMendez  ·  4评论

Mohammad-Quanit picture Mohammad-Quanit  ·  5评论

medoix picture medoix  ·  4评论

dimsmol picture dimsmol  ·  4评论

jonerer picture jonerer  ·  4评论