如何创build参数化和可重用的吞咽任务

有没有办法使这种通用的点,我可以有一个副本,并通过configuration项目,文件列表进入它,而不是复制它的每个文件/configuration组合?

我喜欢有类似的东西

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

请注意代码中的潜在古怪我在这里使用lazypipe和gulp -load-plugins完整文件

 // 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' } } }, 

Gulp只是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); }); 

请注意,callbackcb只是传递给run_tests函数的另一个参数。 如果在调用run_tests之后立即调用了run_tests ,那么在run_tests的asynchronous代码实际完成之前,将会发出任务完成run_tests