Условно запустить задачу, которая ничего не делает в runSequence

У меня есть главная задача под названием build, в этой задаче в режиме разработки я хочу запустить наблюдателей.

Во время производства мне не нужно запускать наблюдателей,

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

С runSequence я пытался пройти false а также null как параметр, но он все еще пытается рассматривать его как имя задачи.

Поэтому я решил запустить задачу, которая ничего не делает:

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

Это правильный путь? Кажется, это работает только иногда, и я не совсем уверен, почему.

Любая помощь будет отличной

1 ответ

Я не понимаю, почему ваше решение должно работать только иногда. В этом нет ничего плохого, поэтому, если ваш реальный код значительно не отличается от того, что вы опубликовали здесь, у вас все будет хорошо.

Если вы хотите избавиться от 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. Это требует, чтобы у вас была установлена хотя бы версия 5.j nodejs, но это делает вашу задачу очень короткой и удобочитаемой:

gulp.task('build', cb => {
    return $.runSequence(
      'globals', 
      'inline', 
      'lazy',
      ...(production) ? [] : [['globals:watch', 'inline:watch', 'lazy:watch']],
      cb);
});
Другие вопросы по тегам