2015-03-02 107 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 
} 

當你有一輛載重汽車的任務,並且你想將它們拆分成文件時,這非常有用。兩個文件具有相同的任務(關於責任),但一個用於開發,一個用於生產。

希望它有幫助!