2016-10-31 28 views
0

我有一個叫做build的主任務,在dev任務模式下,我想運行watchers。有條件地運行一個任務在runSequence中什麼都不做的問題

在生產過程中,我不需要運行任何觀察家,

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

隨着runSequence我試着在falsenull傳遞作爲PARAM但它仍然試圖把它當作一個任務名。

於是我想出了一個解決辦法是運行一個任務,那什麼也不做:

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); 
}); 
相關問題