Я не уверен, что полностью понимаю ваше требование, поэтому я предоставлю несколько возможных решений.
Возможно, вы хотите запускать задачи последовательно (первое решение ниже), однако в своем сообщении вы упомянули параллельное выполнение.
1. Запуск задач последовательно
npm-scripts
поддерживает оператор &&
, который обычно используется в оболочках bash. Однако оператор &&
, используемый в npm-scripts
, успешно работает на разных платформах.
Псевдопример использования оператора &&
для цепочки задач:
"scripts": {
"foo": "npm run task1 && npm run task2 && npm run task3"
},
Запуск $ npm run foo
через интерфейс командной строки, используя приведенный выше пример...
- Изначально работает
task1
.
- Когда
task1
успешно завершит (т. е. task1
завершит работу с нулевым статусом), будет запущен task2
.
- Когда
task2
успешно завершится, будет запущен task3
.
Если левая часть оператора &&
не работает по какой-либо причине, (т. е. завершается с ненулевым кодом/статусом), последующие задачи в правой части не запустятся. Например; если task1
выйдет из строя, task2
и task3
не запустятся.
2. Одновременный запуск задач
npm-scripts
также поддерживает кросс-платформенный оператор &
для одновременного выполнения задач.
Псевдопример с использованием оператора &
:
"scripts": {
"foo": "npm run task1 & npm run task2 & npm run task3"
},
В этом примере основное различие между двойным оператором &&
и одинарным оператором &
заключается в том, что если левая часть одиночного оператора &
дает сбой, то правая часть выполняется независимо. Например; если task1
терпит неудачу, то task2
продолжает работать.
3. Запуск задач параллельно.
Для параллельного запуска задач я рекомендую использовать parallelshell:
$ npm i -D parallelshell
Псевдопример с использованием parallelshell
:
"scripts": {
"foo": "parallelshell \"npm run task1\" \"npm run task2\" \"npm run task3\""
},
Сначала этот пример кажется очень похожим на использование одного оператора &
, показанного в предыдущем разделе, однако он предлагает дополнительные преимущества, перечисленные в документация. Основным преимуществом (IMO) является:
Если command1 или command2 завершится с ненулевым кодом выхода, то это не повлияет на результат вашей оболочки (т.е. они могут выйти из строя, и npm/bash/что угодно проигнорирует это). parallelshell не проигнорирует его и завершит работу с первым ненулевым кодом выхода.
4. Запуск задач параллельно и последовательно.
Допустим, вы хотите запустить task1
и task2
параллельно/одновременно, а затем запустить task3
только после успешного завершения task1
и task2
.
Для этого вы можете использовать как parallelshell
, так и встроенный оператор &&
.
Псевдопример использования parallelshell
и оператора &&
для объединения задач:
"scripts": {
"foo": "parallelshell \"npm run task1\" \"npm run task2\" && npm run task3"
},
ИЗМЕНИТЬ
Решение, основанное на следующем обновлении/редактировании OP:
Другой пример: моей первой задачей может быть запуск webdriver-manager, моей второй задачей — запуск веб-сервера и моей третьей задачей — запускать тесты e2e каждый раз, когда мои файлы изменяются. Итак, мне нужно, чтобы все эти задачи выполнялись одновременно, но их нужно инициализировать в определенном порядке и в определенное время.
5. Запуск задач одновременно.
concurrently можно использовать для одновременного выполнения задач:
$ npm i -D concurrently
Псевдопример с использованием concurrently
:
"scripts": {
"foo": "concurrently \"npm run task1\" \"npm run task2\" \"npm run task3\""
},
В этом примере все задачи (1,2 и 3) будут выполняться одновременно, и они будут запускаться в указанном порядке. Я не знаю достаточно подробностей об инструментах, упомянутых в вашем примере использования, однако все примеры, представленные в этом посте, могут быть объединены по мере необходимости для удовлетворения ваших конкретных требований.
concurrently
также имеет несколько полезных параметров.
person
RobC
schedule
07.10.2017