作為前端,我們常常會和 Stream 有著頻繁的接觸。比如使用 gulp 對項目進行構建的時候,我們會使用 gulp.src 接口將匹配到的文件轉為 stream(流)的形式,再通過 .pipe() 接口對其進行鏈式加工處理;
或者比如我們通過 http 模塊創(chuàng)建一個 HTTP 服務:
const http = require('http'); http.createServer( (req, res) => { //...}).listen(3000);
此處的 req 和 res 也屬于 Stream 的消費接口(前者為 Readable Stream,后者為 Writable Stream)。
事實上像上述的 req/res,或者 process.stdout 等接口都屬于 Stream 的實例,因此較少存在情況,是需要我們手動引入 Stream 模塊的,例如:
//demo1.js'use strict'; const Readable = require('stream').Readable; const rs = Readable(); const s = 'VaJoy'; const l = s.length; let i = 0; rs._read = ()=>{ if(i == l){ rs.push(' is my name'); return rs.push(null) } rs.push(s[i++]) }; rs.pipe(process.stdout);
如果不太能讀懂上述代碼,或者對 Stream 的概念感到模糊,那么可以放輕松,因為本文會進一步地對 Stream 進行剖析,并且談談直接使用它可能會存在的一些問題(這也是為何 gulp 要使用 through2 的原因)。
另外本文的示例均可在我的