这是一个非常简单的示例,您可以使用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你的代码(这只是一个例子,没有任务很多现实生活中的用处):)
编辑:
您也可以使用设置从命令定义相同的任务名称,但不同或加载具有相同任务的两个不同的文件之一。
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
}
当你有一辆载重汽车的任务,并且你想将它们拆分成文件时,这非常有用。两个文件具有相同的任务(关于责任),但一个用于开发,一个用于生产。
希望它有帮助!