Запустите сценарий npm при завершении из консоли «CTRL C»

#npm-scripts #concurrently

Вопрос:

Я хочу запустить yarn dev , чтобы запустить pm2 и webpack в режиме просмотра для разработки. Проблема в том, что мне нужно убить экземпляр pm2 (запустить yarn pm2:del ), когда я завершаю работу вручную, нажав «CTRL C». Как это можно сделать?

пакет.json:

   "scripts": {
    "dev": "yarn pm2:del amp;amp; yarn pm2:dev amp;amp; 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"
  }
 

Ответ №1:

Я провел некоторое исследование и обнаружил следующее: как закрыть сервер с помощью ctrl c, когда в демоне нет

 pm2 kill amp;amp; pm2 start ecosystem.json --only dev --no-daemon
 

Это работает, если вы запускаете pm2 в одиночку, но вы запускаете 2 программы вместе, поэтому попробуйте ниже сценарий:

 {
    "scripts": {
        "dev": "yarn pm2:del amp;amp; yarn pm2:dev amp;amp; yarn wp:dev amp;amp; yarn pm2:del"
    }
}
 

Как это работает?

  • во-первых, убейте всех демонов pm2
  • запустите демон pm2
  • запустите веб-пакет
  • наконец, снова убейте всех демонов pm2, он запустится, когда вы нажмете CTRL C

Комментарии:

1. он не запустил последний шаг на выходе, чтобы убить pm2 🙁

2. Интересно, я попробовал это и сработало. Я использовал этот скрипт для тестирования: echo 'foo' amp;amp; node amp;amp; echo 'bar' . Сначала echo 'foo' работал, затем открылась интерактивная оболочка узла, наконец echo 'bar' , сработала, когда я нажал CTRL C :/

3. Когда я нажал CTRL C , узел выходит с 0. Я думаю, что Webpack не использует 0 при выходе, вероятно, следующий код не был выполнен из-за этого.

4. после того, как я переместил команду в точном порядке в скрипт .sh — это сработало :/

5. Я вижу, что здесь происходит… Webpack завершает работу с кодом 130 вместо кода 0 при нажатии CTRL C , поэтому следующий код никогда не выполняется. Это недопустимо для файлов сценариев, поэтому это сработало.

Ответ №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"
  }