【问题标题】:Run npm script on termination from console "CTRL+C"从控制台“CTRL+C”终止时运行 npm 脚本
【发布时间】:2021-11-23 17:33:02
【问题描述】:

我想运行 yarn dev 以监视模式启动 pm2 和 webpack 以进行开发。问题是当我手动按下“CTRL+C”终止时,我需要终止 pm2 实例(运行yarn pm2:del)。怎么办?

package.json:

  "scripts": {
    "dev": "yarn pm2:del && yarn pm2:dev && yarn wp:dev",
    "pm2:dev": "pm2 start ecosystem.config.js --only dev",
    "pm2:del": "pm2 delete all || exit 0",
    "wp:dev": "webpack --mode=development --watch"
  }

【问题讨论】:

    标签: npm-scripts concurrently


    【解决方案1】:

    我做了一些研究,发现:how to close server on ctrl+c when in no-daemon

    pm2 kill && pm2 start ecosystem.json --only dev --no-daemon
    

    如果你单独运行 pm2 但同时运行 2 个程序,它可以工作,所以试试下面的脚本:

    {
        "scripts": {
            "dev": "yarn pm2:del && yarn pm2:dev && yarn wp:dev && yarn pm2:del"
        }
    }
    

    它是如何工作的?

    • 首先,杀死所有 pm2 守护进程
    • 启动 pm2 守护进程
    • 启动 webpack
    • 最后,再次杀死所有的pm2守护进程,当你按下CTRL + C时它就会运行

    【讨论】:

    • 它没有在退出时运行最后一步来杀死 pm2 :(
    • 有趣,我试过这个,并且成功了。我使用此脚本进行测试:echo 'foo' && node && echo 'bar'。首先echo 'foo' 工作,然后当我按下CTRL + C 时,节点交互外壳终于打开echo 'bar' 工作:/
    • 当我按下CTRL + C时,Node以0退出。我认为Webpack在退出时没有使用0,可能是因为这个而没有执行下一个代码。
    • 在我将命令按确切顺序移动到 .sh 脚本之后 - 它起作用了:/
    • 我知道这里发生了什么...当您按下CTRL + C 时,Webpack 会以代码 130 而不是代码 0 退出,因此下一个代码永远不会执行。这对于脚本文件来说不是一个有效的东西,所以它起作用了。
    【解决方案2】:

    我创建了dev.sh 脚本:

    #!/bin/bash
    yarn pm2:del
    yarn pm2:dev
    yarn wp:dev
    yarn pm2:del
    

    然后使用yarn dev 运行它:

     "scripts": {
        "dev": "sh ./scripts/dev.sh",
        "pm2:dev": "pm2 start ecosystem.config.js --only dev",
        "pm2:del": "pm2 delete all || exit 0",
        "wp:dev": "webpack --mode=development --watch"
      }
    

    【讨论】:

      猜你喜欢
      • 2018-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-01
      • 2015-01-16
      • 1970-01-01
      • 2020-08-23
      • 1970-01-01
      相关资源
      最近更新 更多