我有一个无操作转换流测试,它输出通过它的所有文件的列表。为什么下面的代码只输出文件列表一次?我如何正确地组合两个流?
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());