有条件地运行在runSequence中不执行任何操作的任务

时间:2016-10-31 23:43:51

标签: stream gulp pipe task run-sequence

我有一个名为build的主要任务,在这个开发模式的任务中,我想运行观察者。

在制作期间,我不需要运行任何观察者,

gulp.task('build', cb => {
    return $.runSequence(
        'globals',
        'inline',   
        'lazy',
        (production ? ['empty'] : ['globals:watch', 'inline:watch', 'lazy:watch']),
        cb
    );
});

使用runSequence我尝试传递falsenull作为参数,但仍尝试将其视为任务名称。

因此,我提出的解决方案是运行一项任务,它什么都不做:

gulp.task('empty', cb => {
    return cb();
});

这是正确的方法吗?它似乎只是有时工作,我不确定为什么。

任何帮助都会很棒

1 个答案:

答案 0 :(得分:0)

我不明白为什么你的解决方案有时只能起作用。它没有任何问题,所以除非你的实际代码与你在这里发布的代码有很大不同,否则你应该没问题。

如果您想摆脱empty任务,可以使用.concat()构建任务数组,然后apply()将其转换为runSequence

gulp.task('build', cb => {
    return $.runSequence.apply(null, [
        'globals', 
        'inline', 
        'lazy'
      ]
      .concat((production) ? [] : [['globals:watch', 'inline:watch', 'lazy:watch']])
      .concat(cb));
});

然而,最好的解决方案可能是使用新的ES6 spread operator。这要求您拥有at least nodejs version 5.x installed,但这会使您的任务变得非常简短和可读:

gulp.task('build', cb => {
    return $.runSequence(
      'globals', 
      'inline', 
      'lazy',
      ...(production) ? [] : [['globals:watch', 'inline:watch', 'lazy:watch']],
      cb);
});