我使用一饮而尽处理,缩小和捆绑我的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
),因此你需要能够一个和另一个类型的事件之间不同。