Вот очень простой пример, где вы можете использовать библиотеки gulp-util и gulp-if для передачи параметров при запуске сценария таким образом gulp [taskname] [--settingName settingValue]
. Например:
var gulp = require("gulp"),
gulpUtil = require("gulp-util"),
gulpIf = require('gulp-if');
// Constants
var GULP_CMD_SETTING_A = "A",
GULP_CMD_SETTING_B = "B";
// Setting to be used in tasks
var jsSetting = GULP_CMD_SETTING_A; // Default value
// Init task for setting
gulp.task("cmd-settings", function (done) {
if (gulpUtil.env.settingName === GULP_CMD_SETTING_A) {
// ... logic
jsSetting = GULP_CMD_SETTING_A;
} else if (gulpUtil.env.settingName === GULP_CMD_PARAM_B) {
// ... logic
jsSetting = GULP_CMD_PARAM_B;
}
done();
});
Это базовая задача, требует задач, требующих jsSetting
использовать его, чтобы знать, какое поведение для выполнения.
После этого во всех задачах, которые нуждаются в jsSetting
, обязательно поставите задачу "cmd-settings"
как предварительно заданную. Пример того, как использовать jsSetting
:
gulp.task("use-cmd-settings", ["cmd-settings"], function() {
return gulp.src(...)
.pipe(...)
.pipe(gulpIf(jsSetting === GULP_CMD_SETTING_A, jshint.reporter(...))
.pipe(gulpIf(jsSetting === GULP_CMD_SETTING_B, concat())
.pipe(...);
}
Все, что я должен сделать, это gulp use-cmd-settings --settingName A
и у вас есть задача, Линц код, и gulp use-cmd-settings --settingName B
у вас есть задача, которая concats код (это просто пример, не имеющий много реальной жизни полезности) :)
EDIT:
Вы также можете использовать настройки из команды, чтобы определить одинаковые имена задач, но по-разные или загрузить один из двух различных файлов с теми же задачами.
if (gulpUtil.env.settingName === GULP_CMD_SETTING_A) {
// ... logic
jsSetting = GULP_CMD_SETTING_A;
} else if (gulpUtil.env.settingName === GULP_CMD_PARAM_B) {
// ... logic
jsSetting = GULP_CMD_PARAM_B;
}
if (jsSetting === GULP_CMD_SETTING_A) {
// Tasks definition or import from file
} else if (jsSetting === GULP_CMD_SETTING_B) {
// Tasks definition or import from other file
}
Это чрезвычайно полезно, если у вас есть грузоподъемность задач с глотанием, и вы хотите разбить их на файлы. Два файла имеют одинаковые задачи (в отношении обязанностей), но один для разработки, а один для производства, скажем так.
Надеюсь, это помогло!