2016-03-06 69 views
2

有沒有辦法讓這個通用的點,我可以有一個副本,並通過配置項目和文件列表進入它而不是複製它爲每個文件/配置組合?如何創建參數化和可重用的吞嚥任務

我很想有潛在古怪像

gulp.task('foo_test', function (cb) { 
    run_tests(files.foo_list, config.fooCoverage); 
    cb(); 
} 

注意,在我使用lazypipegulp-load-plugins完整的文件here

// test the server functions and collect coverage data 
gulp.task('api_test', function (cb) { 
    gulp.src(files.api_files) 
     .pipe(istanbulPre()) 
     .on('end', function() { 
      gulp.src(files.api_test_files) 
      .pipe(mochaTask()) 
      .pipe(istanbulAPI()) 
      .on('end', cb); 
     }); 
}); 

var istanbulAPI = lazypipe() 
    .pipe(plugins.istanbul.writeReports, config.apiCoverage); 

config = { 
    apiCoverage: { 
     reporters: ['json'], 
     reportOpts: { 
      json: { 
       dir: 'coverage', 
       file: 'coverage-api.json' 
      } 
     } 
    }, 

回答

2

咕嘟咕嘟代碼 僅僅是JavaScript的。

你可以寫普通的舊規則的功能,就像平時那樣:

function run_tests(srcFiles, srcTestFiles, coverageConfig, cb) { 
    var istanbul = lazypipe() 
    .pipe(plugins.istanbul.writeReports, coverageConfig); 

    gulp.src(srcFiles) 
    .pipe(istanbulPre()) 
    .on('end', function() { 
     gulp.src(srcTestFiles) 
     .pipe(mochaTask()) 
     .pipe(istanbul()) 
     .on('end', cb); 
    }); 
} 

gulp.task('unit_test', function (cb) { 
    run_tests(files.lib_files, files.unit_test_files, config.unitCoverage, cb); 
}); 

gulp.task('api_test', function (cb) { 
    run_tests(files.api_files, files.api_test_files, config.apiCoverage, cb); 
}); 

注意回調cb是傳遞給run_tests功能只是一個參數。如果在調用run_tests之後立即調用該函數,該函數將在run_tests中的異步代碼實際完成之前發出任務完成消息。

+0

謝謝。我用了很長時間的咕嚕聲,以至於我認爲我忘記了這個咕嘟咕嚕的聲音真的是老式的js。在我的大文件中重複的數量正在擾亂我。感謝您花時間根據實際的src擴展答案。 – skarface