Concurrently для параллельного запуска нескольких npm скриптов при разработке

Когда разрабатываешь нетривиальный проект, становится вопрос запуска нескольких сборщиков/скриптов при разработке. Например один для сбора 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. Утилиза запускает несколько процессов, аггрегирует их вывод в консоль и позволяет убить все подпроцессы при убийстве запускающего. Пример из реального проекта:

2 лайка

Да, похожих либ в npm несколько есть :) Вот например. Содержит несколько команд для запуска последовательно, паралельно или даже миксовать =)

PS: а ещё мне не нравится задавать переменные среды прям в строке скрипта. Когда она одна, то ещё ладно. Но часто так бывает, что рано или поздно их становится несколько. Всякие строки для коннектов, ключи, секретные фразы и т.п. Я для этого использую пакет env-cmd

По умолчанию подхватывает .env файл. Можно указывать и конкретные для разных нужд. И вот как эти две команды в комбинации выглядят у меня на одном из проектов :)

"dev": "env-cmd run-p createappjsfile server client ",

А сейчас смотрю в документации даже добавили настройку разных окружений через .rc формат. Прикольно :)

1 лайк

Оператор && осуществляет последовательное выполнение команд. Таким образом, если предыдущая команда завершается ошибкой, вся цепочка выполнения остановится.

Для параллельного запуска команд используйте оператор &.

1 лайк