[英]Conditionally run a task that does nothing in 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();
});
這是正確的方法嗎? 它似乎有時只能工作,我不確定為什么。
任何幫助都會很棒
我不明白為什么您的解決方案只能在某些時候起作用。 它沒有任何問題,因此,除非您的實際代碼與您在此處發布的代碼有明顯不同,否則應該沒問題。
如果要擺脫empty
任務,可以使用.concat()
構造您的任務數組,然后apply()
其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);
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.