簡體   English   中英

有條件地運行在runSequence中不執行任何操作的任務

[英]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我嘗試將falsenull傳遞為參數,但仍嘗試將其視為任務名稱。

所以我想出的解決方案是運行一個任務,什么都不做:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM