簡體   English   中英

如何將對象傳遞給gulp任務以能夠同步運行該任務?

[英]How to pass object to gulp task to be able to run that task synchronously?

我有兩個任務

gulp.task('build:dev', ['task1', task2', task3'], () => {
  doCssmin({'destination': ['file1', 'file2']});
});


gulp.task('build:prod', ['task1', task2', task3'], () => {
  doCssmin({'destination': ['file3', 'file4']});
});

現在,我有了cssMin任務,該任務在build:devbuild:prod之間共享,因此我將其創建為與兩者共享的函數。

function doCssmin(files) {
  _.each(files, function(val, key) {
    gulp.src(val)
    .pipe(minifyCss({compatibility: 'ie8'}))
    .pipe(rename(basename(key)))
    .pipe(gulp.dest(dirname(key)));
  });

}

doCssmin接受files參數為build:devbuild:prod它們具有不同的文件來最小化CSS。 如果我運行build:devbuild:prod doCssmin將異步運行。 但是doCssmin取決於task2

我的問題是如何將doCssmin提取到doCssmin任務並接受files參數,以便可以與build:devbuild:prod任務共享?

不知道它是否太混亂了?

昨天,我回答了一個使您的Gulp任務更加干燥的問題 我相信該答案的很大一部分也適用於此。

為了支持循環,您希望合並從gulp.src接收的流。 在這里使用示例

gulp.task('test', function() {
  var bootstrap = gulp.src('bootstrap/js/*.js')
    .pipe(gulp.dest('public/bootstrap'));

  var jquery = gulp.src('jquery.cookie/jquery.cookie.js')
    .pipe(gulp.dest('public/jquery'));

  return merge(bootstrap, jquery);
});

對於數組,可以使用Array.prototype.map將項目轉換為流,然后合並所有這些項目:

function minifyCss(paths) {
  return merge.apply(this, paths.map(function (path) {
    gulp.src(path)
      .pipe(minifyCss({compatibility: 'ie8'}))
      .pipe(rename(basename(path)))
      .pipe(gulp.dest(dirname(path)));
  }));
}

gulp.task('test', function () {
  return minifyCss(['foo', 'bar']);
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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