2015-03-02 3 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-scripts, а репортер fail будет использоваться по желанию?

ответ

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 у вас есть задача, которая concats код (это просто пример, не имеющий много реальной жизни полезности) :)

EDIT:

Вы также можете использовать настройки из команды, чтобы определить одинаковые имена задач, но по-разные или загрузить один из двух различных файлов с теми же задачами.

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 
} 

Это чрезвычайно полезно, если у вас есть грузоподъемность задач с глотанием, и вы хотите разбить их на файлы. Два файла имеют одинаковые задачи (в отношении обязанностей), но один для разработки, а один для производства, скажем так.

Надеюсь, это помогло!

Смежные вопросы