npm-run-all
предоставляет собственный механизм обработки аргументов с использованием заполнителей в npm-скриптах, как указано в разделе Заполнители аргументов его документации, найденной здесь.
npm-скрипт:
Учитывая ваш текущий npm-скрипт с именем start
, вам нужно переопределить его следующим образом:
"scripts": {
...
"start": "npm-run-all clean \"build -- {@}\" --parallel watch:build --"
...
}
Примечания:
-- {@}
необходимо добавить после build
.1
build -- {@}
должен быть заключен в экранированные двойные кавычки \"...\"
--
также необходимо добавить после последнего вызова скрипта, а именно: watch:build
gulpfile.js
Чтобы получить аргументы, переданные через интерфейс командной строки внутри вашего 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
:
- The path to the executable running the JavaScript file.
- Путь исполняемого файла 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}
, если вы собираетесь передать только один аргумент. Однако -- {@}
обрабатывает несколько аргументов, поэтому его можно использовать и для одного аргумента.
person
RobC
schedule
05.10.2018