javascript - 完成可写流
问题描述
我正在使用 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的文档中找到有关此事件的详细信息。
可读流和可写流有不同的事件来表示它们已经结束/完成的原因是,还有混合流(例如DuplexStream
),它同时包含一个可读流和一个可写流,因此您需要能够区分一种和另一种类型的事件。
推荐阅读
- javascript - 引导程序 4 更新后轮播滑块不起作用
- google-apps-script - 添加估计收入作为参数会导致禁止错误
- java - 如何将矩阵行复制到数组并修改数组?
- c# - 为什么在 Asp.net core web api 的控制器中的操作中使用 async/await
- ios - 如何在 MessageKit 中设置消息气泡的最大宽度
- r - 将简单的十进制数列转换为数值?
- node.js - AWS lambda html-pdf phantomjs“错误:在 NodeJS 12.x 上编写 EPIPE”
- spring-boot - Istio + Jaeger 使用 Spring Boot 跟踪 gRPC 调用
- javascript - .json() 用于错误处理是什么?
- html - 需要修复 JQuery 脚本以强制“href”从单击中按 CTRL+单击