Условно запустить задачу, которая ничего не делает в 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);
});