2016-10-31 5 views
0

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

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

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

С runSequence я попытался переходящим в false и null как пары, но он по-прежнему пытается рассматривать его как TASKNAME.

Так что решение я придумал было выполнить задачу, которая ничего не делает:

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

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

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

ответ

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

 Смежные вопросы

  • Нет связанных вопросов^_^