在Node.js中组合两个Transform流



我有一个无操作转换流测试,它输出通过它的所有文件的列表。为什么下面的代码只输出文件列表一次?我如何正确地组合两个流?

var composed = test().pipe(test());
gulp.src('source/*').pipe(composed);

要组合流,您将第一个pipe()添加到第二个流,但您还必须修改pipe()unpipe(),以便它们适用于第二个流。这样,在合成流上对pipe()的额外调用将使用第二个流的输出而不是第一个流的输出。

function compose(s1, s2) {
    s1.pipe(s2);
    s1.pipe = function (dest) {
        return s2.pipe(dest);
    }
    s1.unpipe = function (dest) {
        return s2.unpipe(dest);
    }
    return s1;
}
var composed = compose(test(), test());
gulp.src('source/*')
    .pipe( composed )  // src -> s1 -> s2
    .pipe( ... );      // s2 -> ...

pipe()返回的流,而不是从返回(允许链接)。因此,第二行基本上是试图管道到test()的第二个实例。你需要做的是:

var first = test();
first.pipe(test());
gulp.src('source/*').pipe(first);

或:

gulp.src('source/*')
    .pipe(test())
    .pipe(test());

相关内容

  • 没有找到相关文章

最新更新