Когда разрабатываешь нетривиальный проект, становится вопрос запуска нескольких сборщиков/скриптов при разработке. Например один для сбора scss, другой - компилятор typescript плюс вебсервер для разработки. И обычно эти скрипты хранятся в package.json. Раньше я писал параллельный запуск скриптов так через bash оператор &&
...
"scripts": {
"dev": "npm run watch-scsss && npm run dev-server && npm run watch-ts",
"watch-scss": "...",
"dev-server": "...",
"watch-ts": "...",
}
...
Минус подхода номер один - не все процессы запускаются даже если в 1 процессе будет ошибка.
Минус два - не видно всех логов ошибок из всех процессов.
Минус три - иногда процессы продолжают жить если убить тот который из запустил.
Сегодня я использую concurrently. Утилиза запускает несколько процессов, аггрегирует их вывод в консоль и позволяет убить все подпроцессы при убийстве запускающего. Пример из реального проекта:
Да, похожих либ в npm несколько есть :) Вот например. Содержит несколько команд для запуска последовательно, паралельно или даже миксовать =)
PS: а ещё мне не нравится задавать переменные среды прям в строке скрипта. Когда она одна, то ещё ладно. Но часто так бывает, что рано или поздно их становится несколько. Всякие строки для коннектов, ключи, секретные фразы и т.п. Я для этого использую пакет env-cmd
По умолчанию подхватывает .env файл. Можно указывать и конкретные для разных нужд. И вот как эти две команды в комбинации выглядят у меня на одном из проектов :)
"dev": "env-cmd run-p createappjsfile server client ",
А сейчас смотрю в документации даже добавили настройку разных окружений через .rc формат. Прикольно :)
Оператор && осуществляет последовательное выполнение команд. Таким образом, если предыдущая команда завершается ошибкой, вся цепочка выполнения остановится.
Для параллельного запуска команд используйте оператор &.