предисловие
Я должен сказать, что экология фронтенда по-прежнему очень сильна.Глядя на различные проекты фронтенда с открытым исходным кодом, всегда можно найти некоторые сюрпризы.Часто среди кучи неизвестных библиотек, которые поставляются с масштабные проекты. Если вы не задумываетесь о создании собственных колес заранее, переход через npm определенно дает много преимуществ.
недавно обнаруженныйmysticatea/npm-run-allЭтот артефакт, этот инструмент для решения официальнойnpm run
команда не может запускать несколько сценариев одновременно, она может помещать такие вещи, какnpm run clean && npm run build:css && npm run build:js && npm run build:html
Длинный список команд сокращен до синтаксиса glob.npm-run-all clean build:*
Такой нежный взгляд. Кроме того, все также знают оболочку&
Синтаксис на самом деле не поддерживает cmd, и для кроссплатформенной поддержки лучше всего использовать такую стороннюю библиотеку. На практике он используется для параллельной сборки и последовательного тестирования большого количества подмодулей. Большая часть следующего контента взята из официальных документов, вот простой перевод своими словами.
Установить
$ npm install npm-run-all --save-dev
# 或者
$ yarn add npm-run-all --dev
инструкции
Этот пакет предоставляет три команды, а именноnpm-run-all
run-s
run-p
, два последних из которыхnpm-run-all
Сокращение с параметрами для последовательного и параллельного соответственно.
Последовательное исполнение
$ npm-run-all clean lint build
Выполните три задачи последовательно. Обратите внимание, что если сценарий возвращает нулевое значение при выходе, последующие сценарии не будут выполняться по умолчанию. Вы можете использовать параметры--continue-on-error
чтобы избежать такого поведения.
параллельное выполнение
$ npm-run-all --parallel lint build
Выполняйте обе задачи одновременно, обратите внимание, что если сценарий завершится с нулевым значением, все остальные дочерние процессы будут выполнены.SIGTERM
прерывание сигнала, вы также можете использовать--continue-on-error
Параметр отключает поведение.
смешанное исполнение
$ npm-run-all clean lint --parallel watch:html watch:js
Эта команда выполняется первой по порядкуclean
lint
два скрипта, затем выполнить одновременноwatch:html
а такжеwatch:js
задача.
$ npm-run-all a b --parallel c d --sequential e f --parallel g h i
# or
$ npm-run-all a b --parallel c d --serial e f --parallel g h i
Эта команда выполняется в следующем порядке:
- запускать последовательно
a
а такжеb
; - а потом запустить одновременно
c
а такжеd
; - бежать снова
e
а такжеf
; - Наконец выполнить одновременно
g
,h
,i
.
Глобоподобное сопоставление имен
Вы можете использовать подстановочные знаки Glob для сопоставления имен задач, упрощая указание нескольких задач с похожими именами.В отличие от стандартного синтаксиса, разделитель определяется/
изменить на:
соответствовать потребностям.
$ npm-run-all --parallel watch:*
👆 не соответствует разделителю, выполняется одновременноwatch:html
watch:js
но не работаетwatch:js:index
.
$ npm-run-all --parallel watch:**
👆 соответствует разделителям, начиная сwatch:
Сценарий в начале будет запущен.
С рабочими параметрами
Используйте двойные кавычки после имени сценария для предоставления параметров, и даже поддерживаются заполнители, чтобы отложить предоставление параметров до запуска команды.
$ npm-run-all build "start-server -- --port {1}" -- 8080
В приведенном выше примере показано, как работают заполнители, в реальном использовании это можно записать так:package.json
:
{
"scripts": {
"start": "npm-run-all build \"start-server -- --port {1}\" --"
}
}
При запуске команды просто:
$ npm run start 8080
> example@0.0.0 start /path/to/package.json
> npm-run-all build "start-server -- --port {1}" -- "8080"
Доступные заполнители включают:
-
{1}
,{2}
, ...- Один параметр, указывающий порядковый номер
-
{@}
- All arguments
-
{*}
- All arguments as combined
Синтаксис здесь похож на шелл, и последние два не понимают разницы, если вы его знаете, вы можете оставить сообщение для ознакомления.
Node API
Эта библиотека также предоставляет интерфейс модуля для Node.Примеры следующие.Подробности см. в официальной документации.
const runAll = require("npm-run-all");
runAll(["clean", "lint", "build:*"], {parallel: false})
.then(() => {
console.log("done!");
})
.catch(err => {
console.log("failed!");
});
runAll(["build:* -- --watch"], {parallel: true})
.then(() => {
console.log("done!");
})
.catch(err => {
console.log("failed!");
});