如何创建参数化和可重用的gulp任务

时间:2016-03-06 01:33:20

标签: node.js gulp

有没有办法让这个泛型到我能拥有它的一个副本并传递配置项和文件列表而不是为每个文件/配置组合复制它?

我喜欢有像

这样的东西
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'
            }
        }
    },

1 个答案:

答案 0 :(得分:4)

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);
});

请注意,回调cb只是传递给run_tests函数的另一个参数。如果在调用run_tests之后立即调用它,它会在run_tests中的异步代码实际完成之前发出任务完成信号。