npm-run-all
предоставляет собственный настраиваемый механизм для обработки аргументов с использованием заполнителей в npm-скриптах, как указано в разделе Аргументы заполнителей найденной документации здесь .
npm-скрипт:
Учитывая ваш текущий npm-скрипт с именем start
, вам нужно переопределить его следующим образом:
"scripts": {
...
"start": "npm-run-all clean \"build -- {@}\" --parallel watch:build --"
...
}
Примечания:
-- {@}
должен быть добавлен после build
. 1 build -- {@}
должен быть заключен в двойные кавычки\"...\"
--
также необходимо добавить после последнего вызова скрипта, а именно: watch:build
gulpfile.js
Для полученияаргументы, передаваемые через CLI внутри вашего gulpfile.js , вам понадобится использовать узлы process.argv
Для демонстрации, скажем, наш gulpfile.js выглядит следующим образом:
var gulp = require('gulp');
var args = process.argv.splice(3, process.argv.length - 3);
gulp.task('doSomething', function() {
// For testing purposes...
if (args.indexOf('--foo') > -1) {
console.log('--foo was passed via the CLI.')
}
if (args.indexOf('--quux') > -1) {
console.log('--quux was passed via the CLI.')
}
});
Примечания:
Первые три элемента в узлах process.argv
:
- Путь к исполняемому файлу, на котором выполняется файл JavaScript.
- Путь к исполняемому файлу JavaScript.
- Имя задачи gulp, т.е.
doSomething
Однако нас интересуют только элементы четвертого элемента в массиве и далее - так как это будут аргументы, передаваемые через CLI.Строка, которая гласит:
var args = process.argv.splice(3, process.argv.length - 3);
создает переменную args
и присваивает массив, содержащий каждый аргумент, передаваемый через CLI, т.е. мы пропускаем первые три вышеупомянутых элемента в пункте 1 выше, используя массивы splice()
метод.
Запуск сценария start
:
Вы запускаете сценарий запуска через CLI следующим образом:
$ npm start -- --foo --quux
Примечание Вы должны предоставить --
, который предшествует npm start
, перед тем, как предоставить свои собственные аргументы.
Вывод:
Использование надуманного gulpfile.js
выше, в сочетании с вашими текущими сценариями, определенными в вашем package.json , и, конечно, необходимые изменения, внесенные в ваш start
сценарий.Когда вы запустите:
$ npm start -- --foo --quux
, на консоли будет напечатано следующее:
--foo was passed via the CLI.
--quux was passed via the CLI.
Запуск:
$ npm start -- --quux
Вы увидите только следующее, напечатанное на консоли:
--quux was passed via the CLI.
И, конечно, запуск:
$ npm start
Не печатает ни одно из сообщений, определенных в gulpfile.js .
Сноски:
1 -- {@}
можно заменить на -- {1}
, если вы тольконамерены передать один аргумент.Тем не менее, -- {@}
обрабатывает несколько аргументов, поэтому можно использовать его и для одного аргумента.