如何创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
。