npm-run-all упрощает настройку скрипта

NPM

предисловие

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

Эта команда выполняется в следующем порядке:

  1. запускать последовательноaа такжеb;
  2. а потом запустить одновременноcа такжеd;
  3. бежать сноваeа такжеf;
  4. Наконец выполнить одновременно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!");
    });