#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"
}