私は、このような何かの作業の流れを持っている:私はdoSomething
がストリームパイプラインを返すようにしたいパイプストリームを単一のストリームのようにするにはどうすればよいですか?
gulp.src('**/*.js')
.pipe(doSomething())
.pipe(dest('out'));
をこれの効果的な結果が明らかに
gulp.src('**/*.js')
.pipe(uglify())
.pipe(header(...))
.pipe(rename(...))
.pipe(dest('out'));
doSomething
缶になるようuglify().pipe(header(...)).pipe(rename(...))
ようなことを言います'tはuglifyを返します(destはそれを読み込むので)、名前を返すことはできません(srcはそれに書き込むため)。だから私の計画は、この結果として、このパイプラインのフラグメントのラッパーのように行動した二重のストリームを構築することでした:
first = uglify();
last = first
.pipe(header(...))
.pipe(rename(...));
gulp.src('**/*.js')
.pipe(wrapper(first, last) /* writes go to first, reads go to last */)
.pipe(dest('out'));
私が正しい道をまっすぐに進んでいること、なぜそれが機能していないのかを知る経験。ここに私がこれまでに持っているものは次のとおりです:
var encapsulateStream = function(first, last, logger) {
logger('encapsulate');
let resultStream = new Duplex({
readableObjectMode: true,
writableObjectMode: true,
read(size) {
logger('read');
while (true) {
let chunk = last.read(size);
if (logger) logger('[in]', '--->', chunk);
if (!this.push(chunk) || chunk === null) {
return;
}
}
},
write(chunk, enc, next) {
logger('write');
if (logger) logger('--->', '[first]', chunk);
first.write(chunk, enc, next);
}});
resultStream.on('finish', function() {
logger('finish');
first.end();
forwardStream(last, resultStream, logger);
});
return resultStream;
};
私はログに「カプセル化」されますが、それ以外のものはありません。どこが間違っていて、これが正しいアプローチですか?
あなたがしようとしている何のためのlibがすでにあります - > [ 'lazypipe'](HTTPS://www.npmjs .com/package/lazypipe) –
コメントを確認できるようにコメントにしてください。 – Hounshell