链式顺序任务

我有3个任务要处理,当完成这3个任务时,我想要执行以下操作:

  1. 将这三个文件一起对待
  2. 丑化
  3. 写入磁盘

随着Grunt我有一个漫长的过程,所有这一切。 这是我用Gulp尝试过的

 gulp.task('libs', function () { return gulp.src('js/libs/*.js') .pipe(concat('01.libs.js', {newLine: ';'})) .pipe(gulp.dest('min')); }); gulp.task('plugins', function () { return gulp.src('js/plugins/*.js') .pipe(concat('02.plugins.js', {newLine: ';'})) .pipe(gulp.dest('min')); }); gulp.task('apps', function () { return gulp.src('js/apps/**/*.js') .pipe(concat('03.apps.js', {newLine: ';'})) .pipe(gulp.dest('min')); }); gulp.task('scripts', ['libs', 'plugins', 'apps'], function () { return gulp .src('min/*.js') .pipe(concat('testFile.js', {newLine: ';\r\n'})) .pipe(rename({suffix: '.min.v' + pkg.version })) .pipe(gulp.dest('min')) .pipe(notify({ message: 'Scripts minified'})); }); 

这工作,但我只想stream输出,而不是写出3个中间文件,然后concat那些。

于是我试了一下:

 function libs () { return gulp.src('js/libs/*.js') .pipe(concat('01.libs.js', {newLine: ';'})); } function plugins () { return gulp.src('js/plugins/*.js') .pipe(concat('02.plugins.js', {newLine: ';'})); } function apps () { return gulp.src('js/apps/**/*.js') .pipe(concat('03.apps.js', {newLine: ';'})); } 

那么我的build将是:

 gulp.task('build', function () { return libs() .pipe(plugins()) .pipe(apps()) .pipe(concat('TestFile.js', {newLine: ';\r\n'})) .pipe(rename({suffix: '.min.v' + pkg.version })) .pipe(gulp.dest('min')); }); 

这不工作。

所以我试过Q

 function allOfThem () { return Q.all(libs(), plugins(), apps()); } gulp.task('build', function () { return allOfThem().then(function (one, two, three) { console.log(one, two, three); }); }); 

这个我猜测,但没有数据在callback中。

我迷路了。 什么是达到这个目的的最好方法?

Solutions Collecting From Web of "链式顺序任务"

使用event-stream.merge

 var es = require('event-stream'); gulp.task('build', function () { return es.merge(libs(), plugins(), apps()) .pipe(concat('TestFile.js', {newLine: ';\r\n'})) .pipe(rename({suffix: '.min.v' + pkg.version })) .pipe(gulp.dest('min')); });