首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用event-stream暂停和恢复Gulp流?

如何使用event-stream暂停和恢复Gulp流?
EN

Stack Overflow用户
提问于 2018-07-10 08:59:57
回答 1查看 499关注 0票数 0

我正在尝试将npm包克隆到客户端位置,因此我创建了多个流来完成此操作,并将它们合并为从gulp.task()返回。然而,据我所知,我需要暂停流,以便任务接收到正确的退出。

下面的代码运行时没有错误,但是如果我注释return行。当我预计没有一个流到达它们的gulp.dest()时,其中一个包仍然被复制。为什么不暂停所有的流?

代码语言:javascript
复制
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.
});
EN

回答 1

Stack Overflow用户

发布于 2018-07-10 11:35:50

由于以下代码仅适用于merge-stream,因此event-stream中可能存在错误。

代码语言:javascript
复制
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没有正确关闭任务。输出如下:

代码语言:javascript
复制
[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.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51255885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档