我正在尝试将npm包克隆到客户端位置,因此我创建了多个流来完成此操作,并将它们合并为从gulp.task()返回。然而,据我所知,我需要暂停流,以便任务接收到正确的退出。
下面的代码运行时没有错误,但是如果我注释return行。当我预计没有一个流到达它们的gulp.dest()时,其中一个包仍然被复制。为什么不暂停所有的流?
var gulp = require('gulp')
, eventStream = require('event-stream')
;
const projects = {
src: {
dependencies: {
codemirror: './src/lib/codemirror',
acorn: './src/lib/acorn'
}
}
};
gulp.task('init:client-packages', function () {
let streams = []
, ps = eventStream.pause();
// Load project client-side dependencies
for (let prj in projects) {
for (let pkg in projects[prj].dependencies) {
streams.push(
gulp.src('./node_modules/' + pkg + '/**')
.pipe(ps)
.pipe(gulp.dest(projects[prj].dependencies[pkg]))
);
}
}
// Merge source streams
return eventStream.merge(streams).pipe(ps.resume());
// ^^ Commenting this line doesn't block gulp.dest() from completing.
});发布于 2018-07-10 11:35:50
由于以下代码仅适用于merge-stream,因此event-stream中可能存在错误。
var merge = require('merge-stream')
, eventStream = require('event-stream')
;
gulp.task('init:client-packages', function() {
let streams = [];
// Load project client-side dependencies
for (let prj in projects) {
for (let pkg in projects[prj].dependencies) {
streams.push(
gulp.src('./node_modules/' + pkg + '/**')
.pipe(gulp.dest(projects[prj].dependencies[pkg]))
);
}
}
// Merge source streams
return merge(streams);
// --OR--
return eventStream.merge(streams); // Results in message below.
});如上所述,event-stream没有正确关闭任务。输出如下:
[23:36:46] Starting 'init:client-packages'...
[23:36:47] The following tasks did not complete: init:client-packages
[23:36:47] Did you forget to signal async completion?
Process terminated with code 1.https://stackoverflow.com/questions/51255885
复制相似问题