Ctrl + C服务器后运行npm postscript

时间:2020-04-12 07:44:14

标签: node.js npm

我正在容器中运行开发数据库。

我打算使用npm自动启动和停止容器,因此我在pre上添加了一些postpackage.json脚本:

"prewatch": "docker start mongo",
"watch": "nodemon app.js",
"postwatch": "docker stop mongo"

我发现的问题是,我用post关闭了nodemon后,我的Ctrl+C脚本无法运行。

有什么想法可以克服吗?

1 个答案:

答案 0 :(得分:0)

是否会在nodemon config脚本中添加events来解决您的问题?

例如,通过package.json:

{

  "nodemonConfig": {
    "events": {
      "crash": "docker stop mongo"
    } 
  }
}

更新:

TLDR:nodemon事件在这里不起作用,禁用restartable可以实现预期的行为。

像这样添加到配置restartable: false中:

  "scripts": {
    "prestart": "echo \"npm:prestart\"",
    "start": "nodemon server.js", 
    "poststart": "echo \"npm:poststart\""
  },

  "nodemonConfig": {
    "restartable": false,
    "events": {
      "start": "echo \"Start event\"",
      "crash": "echo \"Crash event\"",
      "exit": "echo \"Exit event\""
    }
  },

npm start -- -V开始,然后按Ctrl+c 两次,我得到以下信息:

> nodemon_events@1.0.0 prestart /home/kyr/test/nodemon_events
> echo "npm:prestart"

npm:prestart

> nodemon_events@1.0.0 start /home/kyr/test/nodemon_events
> nodemon server.js "-V"

[nodemon] 2.0.3
[nodemon] reading config ./package.json
[nodemon] send SIGHUP to 8929 to restart
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] bind start -> `echo "Start event"`
[nodemon] bind crash -> `echo "Crash event"`
[nodemon] bind exit -> `echo "Exit event"`
[nodemon] starting `node server.js`
[nodemon] forking
[nodemon] child pid: 8942
Start event
[nodemon] watching 2 files
server:run
[nodemon] exiting

> nodemon_events@1.0.0 poststart /home/kyr/test/nodemon_events
> echo "npm:poststart"

npm:poststart

看起来有些奇怪,但可以解决您的问题。