链式顺序任务
我有3个任务要处理,当完成这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中。
我迷路了。 什么是达到这个目的的最好方法?
使用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')); });