网络流-聚合
Web Streams,基于WHWG的光谱参考执行.
链接
使用量
这个库有多种变体:
web-streams-polyfill(单位:千美元) 填马 提供流执行 不取代任何全球,针对ES2015+环境. 建议用于节点6+应用程序,或用于支持现代浏览器的网络库.web-streams-polyfill/es5:以ES5+环境为目标的马匹填充. 建议用于遗留的节点应用程序,或用于支持更老浏览器的网络库.web-streams-polyfill/polyfill: 取代本地流执行的多填充, 目标为ES2015+环境. 推荐用于支持现代浏览器的 Web 应用程序<script>标签.web-streams-polyfill/polyfill/es5:针对ES5+环境的多填充. 建议用于支持旧浏览器的网络应用程序<script>标签.
每个变体还包含TypeScript类型定义,与TypeScript中包含的流的DOM类型定义相兼容. 这些类型定义需要TypeScript版本5.7或更高.
在第4版中,变体列表被重新修改,以拥有更现代的默认并减少包的下载大小. 见 移徙指南 更多信息.
用作多填充器 :
<!-- option 1: hosted by unpkg CDN -->
<script src="https://unpkg.com/web-streams-polyfill/dist/polyfill.js"></script>
<!-- option 2: self hosted -->
<script src="/path/to/web-streams-polyfill/dist/polyfill.js"></script>
<script>
var readable = new ReadableStream();
</script>
用作节点模块 :
var streams = require("web-streams-polyfill");
var readable = new streams.ReadableStream();
ES2015模块内用作马厩:
import { ReadableStream } from "web-streams-polyfill";
const readable = new ReadableStream();
在ES2015模块内用作多填充:
import "web-streams-polyfill/polyfill";
const readable = new ReadableStream();
[尖叫声] 与内置流相兼容
如果您的浏览器或运行时间已经支持 Web Streams, 装入多填充会 无条件 替换 全球
ReadableStream, (中文(简体) ),WritableStream财务报告和审定财务报表TransformStream包含多填充版本的课. 然而,浏览器 API 喜欢fetch()将仍然使用 内置 溪流课. 例如,这会导致令人惊讶的结果Response.body不会是instanceof ReadableStream在多填充取代全局后ReadableStream课.考虑使用
ReadableStream.from()转换内置流(例如从fetch()以一条充满的河流发誓, 或尝试 有条件地装入多填充 如果你不总是需要多填充.见 问题20 更多细节.
有条件装载
网络流是 得到广泛支持 跨越所有现代浏览器 (包括Chrome,Firefox和Safari)和服务器运行时间(包括Node.js,Deno和Bun). 考虑使用特性检测来检查您的平台的内置流执行能否满足您的应用需求, 并仅在需要时加载多填充.
以下是几个有条件地加载多填充的例子:
// Check for basic ReadableStream support
if (!globalThis.ReadableStream) {
await import("web-streams-polyfill/polyfill");
}
// Check for basic TransformStream support
if (!globalThis.TransformStream) {
await import("web-streams-polyfill/polyfill");
}
// Check for async iteration support
if (typeof globalThis.ReadableStream?.prototype[Symbol.asyncIterator] !== 'function') {
await import("web-streams-polyfill/polyfill");
}
兼容性
这个 polyfill 财务报告和审定财务报表 ponyfill 变体在任何ES2015相容的环境中工作.
这个 polyfill/es5 财务报告和审定财务报表 ponyfill/es5 变体在具有全球特性的任何ES5兼容环境中起作用 Promise。 。 。 .
如果您需要支持旧浏览器或没有本地版本的节点版本 Promise 执行
(检查 辅助表格),您必须首先包括 Promise 多边填充
(例如:. 承诺填充) (中文(简体) ).
可同步支持 ReadableStream 所有变体中都有,但需要ES2018兼容环境或多填充 Symbol.asyncIterator。 。 。 .
WritableStreamDefaultController.signal 在所有变体中都有,但需要一个全球 AbortController 建筑师。 必要时,考虑使用多填充法,例如: 中止控制器- 聚合。 。 。 .
用 BOB 读取器读取 在所有变体中都有,但需要 ArrayBuffer.prototype.transfer() 或者说 structuredClone() 以正确转移给定视图的缓冲。 如果无法使用,则缓冲器在读取时不会被转移.
工具兼容性
此软件包使用 子路径导出 对于它的变体。 因此,您需要12个或以上的节点才能 import 或者说 require() 这样的变体.
当使用 TypeScript 时, 请确定您 moduleResolution 设置为 "node16", (中文(简体) ), "nodenext" 或者说 "bundler"。 。 。 .
遵守情况
多填充工具 版本 080852c (2025年4月3日) (中文(简体) ) 中 .
对多填充物进行测试 网络平台测试 用于测试其本地执行. 混合填充旨在通过所有测试,但出于实际原因允许一些例外:
- 默认(ES2015)变体通过所有测试,但 原型的测试
ReadableStream同步执行器。 。 。 . 获取正确的%AsyncIteratorPrototype%需要使用同位素生成器(async function* () {}),在ES2018之前为无效语法. 相反,多填充 创建自己的版本 这在功能上相当于真正的原型. - ES5变体通过与ES2015变体相同的测试,但关于构造器的具体特征,特性和方法的各种测试除外.
这些测试失败不影响多填充的运行时间行为.
例如:
- 这个
name下平面构造器的属性不正确. - 这个
length带有可选参数的下平面构造器和方法的属性是不正确的. - 并非所有属性和方法都被正确标记为不可承担.
- 下级分级方法不正确标出不可分级.
- 这个
贡献者
多亏了这些人 原始多填充数字 :