我有一个无操作的转换流测试,它输出通过它传递的所有文件的列表。为什么以下代码只输出一次文件列表?如何正确组合两个流?
var composed = test().pipe(test());
gulp.src('source/*').pipe(composed);
答案 0 :(得分:2)
要撰写流,您需要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 -> ...
答案 1 :(得分:1)
pipe()
会将通过传输到的流,而不是从传递(以允许链接)。所以第二行基本上是试图管道到test()
的第二个实例。你需要做的是:
var first = test();
first.pipe(test());
gulp.src('source/*').pipe(first);
或者:
gulp.src('source/*')
.pipe(test())
.pipe(test());