链式顺序任务[重复]
Posted
技术标签:
【中文标题】链式顺序任务[重复]【英文标题】:Chain sequential tasks [duplicate] 【发布时间】:2014-03-23 13:05:09 【问题描述】:我有 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'));
);
这可行,但我只想流式传输输出,而不是只写出 3 个中间文件然后连接它们。
于是我尝试了:
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);
);
);
我猜这可行,但then
的回调中没有数据。
我迷路了。实现这一目标的最佳方法是什么?
【问题讨论】:
【参考方案1】:使用 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'));
);
【讨论】:
以上是关于链式顺序任务[重复]的主要内容,如果未能解决你的问题,请参考以下文章