在Node.js中构造两个Transformstream

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

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

为了组成stream,您将pipe()从第一个stream向第二个stream,但是还必须修改pipe()unpipe()以便将它们应用于第二个stream。 通过这种方式,对构成stream的pipe()额外调用将​​使用第二个stream的输出,而不是第一个stream的输出。

 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()返回正在pipe道的stream,而不是(允许链接)。 所以第二行基本上是试图pipe道到test()的第二个实例。 你需要做的是:

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

要么:

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