将参数传递给gulp任务

时间:2015-03-02 16:49:31

标签: node.js gulp

我有一个运行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报告者?

1 个答案:

答案 0 :(得分:1)

这是一个非常简单的示例,您可以使用gulp-utilgulp-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任务并且您想要将它们拆分成文件时,这非常有用。两个文件具有相同的任务(关于职责),但一个用于开发,一个用于生产。比如说。

希望它有所帮助!