我有一个运行jshint的任务:
gulp.task('lint-scripts', function () {
var jshint = buildTools.jshint,
filesToLint = ...
return gulp
.src(filesToLint)
.pipe(jshint('jshint.json'))
.pipe(jshint.reporter('jshint-stylish'))
//.pipe(jshint.reporter('fail'))
;
});
这是它在开发过程中应该执行的方式。
我还需要这个相同任务的“发布”版本,其中这一行没有被注释掉:
//.pipe(jshint.reporter('fail'))
最好的方法是什么?我不想用一行代码差异创建复制任务。有没有办法可以将变量传递给任务lint-scripts
,并且可以选择使用fail
报告者?
答案 0 :(得分:1)
这是一个非常简单的示例,您可以使用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
你有一个任务可以让你的代码连接起来(这只是一个例子,没有多少现实生活有用):))
您还可以使用命令中的设置来定义相同的任务名称,但不同地加载或使用相同的任务加载两个不同文件中的一个。
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
}
当您有卡车装载的gulp任务并且您想要将它们拆分成文件时,这非常有用。两个文件具有相同的任务(关于职责),但一个用于开发,一个用于生产。比如说。
希望它有所帮助!