0

我有一个名为 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();
});

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

任何帮助都会很棒

4

1 回答 1

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 扩展运算符。这要求您至少安装了 nodejs 版本 5.x,但它使您的任务非常短且易读:

gulp.task('build', cb => {
    return $.runSequence(
      'globals', 
      'inline', 
      'lazy',
      ...(production) ? [] : [['globals:watch', 'inline:watch', 'lazy:watch']],
      cb);
});
于 2016-11-01T09:00:28.343 回答