2016-02-03 30 views
0

我已經配置像這樣一口任務:一飲而盡 - 傳遞參數傳遞給所謂的runSequence任務

gulp.task('concatenate_client_js', function(){ 
    return merge2(
     gulp.src('./gulp/buildConfig.json') 
     .pipe(plugins.ngConfig('app.envConfig', { 
      environment: 'development' 
     }) 
    ), 
     gulp.src(paths.clientJS) 
    ) 
    .pipe(plugins.concat('angular_app.js')) 
    .pipe(gulp.dest(paths.distScripts)); 
}); 

這個任務,然後調用在其他任務的runSequence(在不同的咽文件分割),我有一個像所以:

gulp.task('prepare-dev-files', function(callback){ 
    runSequence('clean_dist_dir', 'copy_assets', 'copy_serverFiles', 'copy_bower_css', 
    ['compile_bower_sass', 'concatonate_bower_js'], 
    'compile_sass', 'concatenate_client_js', 'compile_main_js', callback); 
}); 

gulp.task('prepare-staging-files', ['prepare-dev-files'], function(callback) { 
    runSequence('clean_test_src', 'copy_unitTestFiles', 'copy_files_for_coverage_report', 'karma_tests_ci', callback) 
}); 

我想做什麼就能做的是設置environment配置選項在concatenate_client_js任務ngConfig插件基於供給任務ARGS或PARAMS。

我見過像yargs這樣的工具,但我不確定如何在我的情況下使用。我希望能夠提供一個參數,例如--mode development用於在runSequence中調用我的任務,例如,

gulp.task('prepare-staging-files', ['prepare-dev-files --mode staging'], function(callback) { 
     runSequence('clean_test_src', 'copy_unitTestFiles', 'copy_files_for_coverage_report', 'karma_tests_ci', callback) 
    }); 

然後根據傳遞給任務的模式參數添加一些切換代碼。

這是可以實現的嗎? 謝謝

回答

3

它是可以實現的。您可以使用yargs模塊來執行此操作。 yargs模塊的argv屬性可用於gulpfile.js中定義的所有吞嚥任務。這裏有一個例子:

var gulp = require('gulp'); 

var args = require('yargs').argv; 

gulp.task('a', function() { 
    console.log('Arguments for A: ', args.env); 
}); 

gulp.task('b', function() { 
    console.log('Arguments for B: ', args.env); 
}); 

gulp.task('c', ['a', 'b'], function() { 
    console.log('Arguments for C: ', args.env); 
}); 

命令$ gulp c --env development給出了下面的輸出:

14時42分01秒]開始 'A' ...

參數對於A:發展

[14:42:01] 175微秒後完成「a」

[14:42:01]開始'b'...

參數爲B:發展

[14時42分01秒]已完成 'B' 後67微秒

[14時42分01秒]啓動 'C' ......

爭鳴C:顯影

[14時42分01秒]後51微秒

成品 'c' 的