我正在使用gulp来处理,缩小和捆绑我的CSS文件(以及js)。但是我不想立即写文件。我想检查处理后的内容的md5总和是否不等于捆绑文件现有版本的md5总和,并且仅在这种情况下才写。
而是立即尝试从进程中以字符串形式写入文件。
但是,该构造无法正常工作。
const Stream = require('stream');
const writableStream = new Stream.Writable({ objectMode: true });
var file = "";
writableStream._write = (chunk, encoding, next) => {
file += chunk.contents.toString();
next();
}
let bundlePipe = gulp.src([...vendorLinks.map(e => path.resolve(htmlPath + e)), ...resourceLinks.map(e => path.resolve(htmlPath + e))], { sourcemaps: true })
.pipe(postcss([cssnext, cssnano]))
.pipe(concat("style.bundle.min.css"))
.pipe(writableStream);
//.pipe(gulp.dest(path.resolve(paths["html/static/css"])));
bundlePipe.on("end", () => {
// It never goes there!
console.log("get file contents", file);
}
我创建的writableStream似乎不知道所有数据都已经传递给它,并且从不发出结束信号。
我该怎么办,以便writableStream在从管道中获取所有数据后将其关闭?
最佳答案
可写流不会发出end
,只有可读流会发出这种事件。
可写流上的等效项是finish
。您可以在Node.js的documentation中找到有关此事件的详细信息。
可读流和可写流具有不同的事件来表示它们已结束/结束的信号的原因是,还有混合流(例如DuplexStream
)同时包含一个可读流和一个可写流,因此您需要能够区分一种事件和另一种事件。
关于javascript - 完成可写流,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54630607/