2015-03-02 98 views
0

我要运行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-scriptsfail记者可以选择使用?

回答

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你有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 
} 

当你有一辆载重汽车的任务,并且你想将它们拆分成文件时,这非常有用。两个文件具有相同的任务(关于责任),但一个用于开发,一个用于生产。

希望它有帮助!