Обычно мы можем запускать задачу gulp с консоли через что-то вроде gulp mytask
. Есть ли в любом случае, что я могу передать параметр в задачу gulp? Если возможно, пожалуйста, покажите пример, как это можно сделать.Параметр прохождения для задачи Gulp
ответ
Это функциональные программы не могут оставаться без. Вы можете попробовать yargs.
npm install --save-dev yargs
Вы можете использовать его как это:
gulp mytask --production --test 1234
В коде, например:
var argv = require('yargs').argv;
var isProduction = (argv.production === undefined) ? false : true;
Для вашего понимания:
> gulp watch
console.log(argv.production === undefined); <-- true
console.log(argv.test === undefined); <-- true
> gulp watch --production
console.log(argv.production === undefined); <-- false
console.log(argv.production); <-- true
console.log(argv.test === undefined); <-- true
console.log(argv.test); <-- undefined
> gulp watch --production --test 1234
console.log(argv.production === undefined); <-- false
console.log(argv.production); <-- true
console.log(argv.test === undefined); <-- false
console.log(argv.test); <-- 1234
Надеется, что вы можете взять это отсюда.
Существует еще один плагин, который вы можете использовать, минималистский. Есть еще одна должность, где есть хорошие примеры как для яргов, так и для минималистов: (Is it possible to pass a flag to Gulp to have it run tasks in different ways?)
Действительно хорошо письменный ответ, спасибо за примерами! –
Как получить доступ к этому в javascript? – vini
Если вы используете gulp with yargs, обратите внимание на следующее: если у вас есть задача «клиент» и wan't для использования сборки yargs в проверке параметров для требуемых команд: command («клиент», «Создать каталог клиента») – suther
@ Ответ Этана будет полностью работать. По моему опыту, более узкий способ - использовать переменные среды. Это стандартный способ настройки программ, развернутых на платформах хостинга (например, Heroku или Dokku).
Чтобы передать параметр из командной строки, сделать это следующим образом:
развития: gulp dev
Производство: NODE_ENV=production gulp dev
Синтаксис отличается, но очень Unix, и он совместим с Heroku, Dokku и т. д.
Вы можете получить доступ к переменной в своем коде на process.env.NODE_ENV
MYAPP=something_else gulp dev
установит
process.env.MYAPP === 'something_else'
This answer может дать вам некоторые другие идеи.
Вот мой пример, как я его использую. Для задачи css/less. Может применяться для всех.
var cssTask = function (options) {
var minifyCSS = require('gulp-minify-css'),
less = require('gulp-less'),
src = cssDependencies;
src.push(codePath + '**/*.less');
var run = function() {
var start = Date.now();
console.log('Start building CSS/LESS bundle');
gulp.src(src)
.pipe(gulpif(options.devBuild, plumber({
errorHandler: onError
})))
.pipe(concat('main.css'))
.pipe(less())
.pipe(gulpif(options.minify, minifyCSS()))
.pipe(gulp.dest(buildPath + 'css'))
.pipe(gulpif(options.devBuild, browserSync.reload({stream:true})))
.pipe(notify(function() {
console.log('END CSS/LESS built in ' + (Date.now() - start) + 'ms');
}));
};
run();
if (options.watch) {
gulp.watch(src, run);
}
};
gulp.task('dev', function() {
var options = {
devBuild: true,
minify: false,
watch: false
};
cssTask (options);
});
Для этого используется официальный рецепт глотки с использованием minimist.
https://github.com/gulpjs/gulp/blob/master/docs/recipes/pass-arguments-from-cli.md
Основы использует minimist отделить Cli аргументов и объединить их с известными вариантами:
var options = minimist(process.argv.slice(2), knownOptions);
Какими бы разбором что-то вроде
$ gulp scripts --env development
Более полной информации в рецепт.
Почему мусор в верхней части списка и правильное решение на дне не поднимаются? sigh – Azarus
Просто загрузите его в новый объект в процессе. process.gulp = {}
и попросите его посмотреть.
Если вы хотите, чтобы избежать добавления дополнительных зависимостей, я нашел узла process.argv
быть полезным:
gulp.task('mytask', function() {
console.log(process.argv);
});
Так следующее:
gulp mytask --option 123
должен показывать:
[ 'node', 'path/to/gulp.js', 'mytask', '--option', '123']
Если вы уверены, что желаемый параметр находится в правильном положении, тогда флаги не необходимо ** Просто используйте (в данном случае):.
var option = process.argv[4]; //set to '123'
НО: как вариант не может быть установлен, или может находиться в другом месте, я чувствую, что лучшей идеей было бы что-то вроде:
var option, i = process.argv.indexOf("--option");
if(i>-1) {
option = process.argv[i+1];
}
Таким образом, вы можете обрабатывать изменения в нескольких вариантах, как:
//task should still find 'option' variable in all cases
gulp mytask --newoption somestuff --option 123
gulp mytask --option 123 --newoption somestuff
gulp mytask --flag --option 123
** Edit: верно для узла скриптов, но глоток интерпретирует что-либо без ведущего «-» как другого названия задачи , Таким образом, использование gulp mytask 123
не удастся, потому что gulp не может найти задачу под названием «123».
Существует опечатка в опции var, i = process, argv.indexOf ("- option"); ". Я считаю, что это должно быть proccess.argv. –
Ах, так и должно. Исправленный. Спасибо @luis –
Я просто хотел проверить флаг -dev, чтобы я мог различать производственную и более низкую среду. Это делает трюк без добавления дополнительных зависимостей. Спасибо! – b01
Если вы хотите использовать среды Params и другие утилиты, а также такие, как журнал, вы можете использовать gulp-util
/*
$npm install gulp-util --save-dev
$gulp --varName 123
*/
var util = require('gulp-util');
util.log(util.env.varName);
Передача параметра проглатывать может означать несколько вещей:
- От командной строки в файл gulpfile (уже приведенный здесь пример).
- От основного тела скрипта gulpfile.js до задач глотания.
- От одной задачи глобализации до другой задачи глотка.
Вот подход к передаче параметров из основного файла gulpfile в задачу gulp. Перемещая задачу, которая нуждается в параметре, в свой собственный модуль и обертывает его в функцию (так что параметр может быть передан).:
// ./gulp-tasks/my-neat-task.js file
module.exports = function(opts){
opts.gulp.task('my-neat-task', function(){
console.log('the value is ' + opts.value);
});
};
//main gulpfile.js file
//...do some work to figure out a value called val...
var val = 'some value';
//pass that value as a parameter to the 'my-neat-task' gulp task
require('./gulp-tasks/my-neat-task.js')({ gulp: gulp, value: val});
Это может пригодиться, если у вас есть много задач глотка и хотите передать им некоторые полезные экологические конфиги. Я не уверен, может ли он работать между одной задачей и другой.
Бонусные баллы за вас! Спасибо – danjah
Если вы используете глотка с yargs, обратите внимание на следующее:
Если у вас есть задача «клиента» и wan't использовать yargs построить в параметре проверки необходимых команд:
.command("customer <place> [language]","Create a customer directory")
называть его:
gulp customer --customer Bob --place Chicago --language english
yargs будет Аллуэй выдаст ошибку, что не хватает команды был назначен на вызов, даже если у вас есть !! -
Дайте ему попробовать и добавить только цифру в команде (чтобы не совпадающий с именем Глоток-задачи) ... и он будет работать:
.command("customer1 <place> [language]","Create a customer directory")
Это причина gulp, похоже, запускает задачу, прежде чем yargs сможет проверить этот требуемый параметр. Это стоило мне скудных часов, чтобы понять это.
Надеется, что это помогает ..
Вот еще один способ без дополнительных модулей:
мне нужно было угадать среды от имени задачи, у меня есть «Dev» задача и «» задачи лезвия ,
Когда я запустил gulp prod
, он должен быть установлен в среду prod. Когда я запускаю gulp dev
или что-то еще, он должен быть настроен на среду dev.
Для этого я просто проверить имя выполняемой задачи:
devEnv = process.argv[process.argv.length-1] !== 'prod';
Я знаю, что я опаздываю, чтобы ответить на этот вопрос, но я хотел бы добавить что-то, чтобы ответить на @Ethan, то наибольшее количество голосов и принял ответ.
Мы можем использовать yargs
, чтобы получить параметр командной строки, и с этим мы также можем добавить наш собственный псевдоним для некоторых параметров, таких как follow.
var args = require('yargs')
.alias('r', 'release')
.alias('d', 'develop')
.default('release', false)
.argv;
Просьба сослаться на эту ссылку для получения более подробной информации. https://github.com/yargs/yargs/blob/HEAD/docs/api.md
Ниже приведено описание псевдонима согласно данным в документации yargs
. Мы также можем найти более yargs
функции там и можем улучшить опыт командной строки.
.псевдоним (ключ, псевдоним)
Установить имена ключей как эквивалентные таким образом, чтобы обновления ключа распространялись на псевдонимы и наоборот.
Опционально .alias() может принимать объект, который сопоставляет ключи с псевдонимами. Каждый ключ этого объекта должен быть канонической версией опции, а каждое значение должно быть строкой или массивом строк.
- 1. параметр прохождения
- 2. Массив как параметр для прохождения?
- 3. Параметр прохождения для пользовательской директивы
- 4. Параметр прохождения для ViewScoped Bean
- 5. параметр прохождения для прослушивателя событий
- 6. C++ Параметр прохождения
- 7. Зависимые задачи Gulp
- 8. Задачи Gulp не выходят
- 9. Задачи Gulp из других задач Gulp?
- 10. Переименование задачи gulp
- 11. Задачи зависимостей Gulp
- 12. Задача задачи Gulp
- 13. Зависимость задачи от Gulp
- 14. Параметр прохождения в маршрутах
- 15. C# параметр прохождения ненормальность
- 16. Параметр прохождения в QueueUserWorkItem
- 17. Параметр прохождения сохраненной процедуры
- 18. Параметр прохождения с UITapGestureRecognizer
- 19. параметр прохождения в CTE
- 20. Запуск задачи gulp после завершения другой задачи
- 21. Как сохранить форматирование Babeljs для задачи gulp?
- 22. Точный параметр прохождения Laravel для маршрута
- 23. Параметр запроса прохождения для просмотра - Laravel
- 24. Последовательные задачи Gulp как поток
- 25. Gulp - условная задача внутри задачи
- 26. C++ 11 оптимальный параметр прохождения
- 27. Звоните .mix изнутри задачи gulp
- 28. Задачи Browserify и Babel gulp
- 29. Задачи Gulp не работают последовательно
- 30. Параметр прохождения в jsf, праймеры
https://github.com/gulpjs/gulp/blob/master/docs/recipes/pass-arguments-from-cli.md – Heikki