предисловие
Я должен сказать, что экология фронтенда по-прежнему очень сильна.Глядя на различные проекты фронтенда с открытым исходным кодом, всегда можно найти некоторые сюрпризы.Часто среди кучи неизвестных библиотек, которые поставляются с масштабные проекты. Если вы не задумываетесь о создании собственных колес заранее, переход через 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!");
});