UNPKG

@wevu/web-apis

Version:

Web API polyfills and global installers for mini-program runtimes

149 lines (105 loc) 5.31 kB
# @wevu/web-apis 使用指南 ## 1. 简介 `@wevu/web-apis` 为小程序运行时提供一组 Web API 兼容层,重点解决第三方库在小程序环境中缺失 `fetch``Request``Response``AbortController``XMLHttpRequest``URL``WebSocket``TextEncoder``TextDecoder``atob``btoa``queueMicrotask``performance.now``crypto.getRandomValues``Event``CustomEvent` 等全局对象的问题。 它主要服务于: - `weapp-vite` 的 Web Runtime 全局注入能力 - `wevu` 运行时对 Web 风格请求库的兼容 - `axios``graphql-request` 等依赖 Web API 的第三方库 ## 2. 特性 - 按需安装 `fetch``Headers``Request``Response` - 提供 `AbortController` / `AbortSignal` 兼容层 - 提供 `XMLHttpRequest``URL``URLSearchParams``Blob``FormData``WebSocket` 兼容层 - 提供 `atob``btoa``queueMicrotask``performance.now``crypto.getRandomValues``Event``CustomEvent` 兼容层 - 自动把能力安装到可用的小程序宿主全局对象 - 默认基于 `@wevu/api` 的请求能力完成底层转发 ## 3. 安装 ```bash pnpm add @wevu/web-apis ``` ## 4. 快速开始 ### 4.1 安装完整 Web Runtime ```ts import { installWebRuntimeGlobals } from '@wevu/web-apis' installWebRuntimeGlobals() const response = await fetch('https://request-globals.invalid/data') console.log(await response.json()) ``` ### 4.2 仅安装 Abort 相关能力 ```ts import { installAbortGlobals } from '@wevu/web-apis' installAbortGlobals() const controller = new AbortController() controller.abort() ``` ### 4.3 按目标精简注入 ```ts import { installWebRuntimeGlobals } from '@wevu/web-apis' installWebRuntimeGlobals({ targets: ['fetch', 'Headers', 'Request', 'Response'], }) ``` ### 4.4 安装轻量通用 Web Runtime 能力 ```ts import { installWebRuntimeGlobals } from '@wevu/web-apis' installWebRuntimeGlobals({ targets: ['atob', 'btoa', 'queueMicrotask', 'performance', 'crypto', 'Event', 'CustomEvent'], }) const encoded = btoa('AB') const decoded = atob(encoded) const now = performance.now() const bytes = crypto.getRandomValues(new Uint8Array(4)) const event = new CustomEvent('payload', { detail: { ok: true } }) ``` ### 4.5 安装并使用 WebSocket ```ts import { installWebRuntimeGlobals } from '@wevu/web-apis' installWebRuntimeGlobals({ targets: ['WebSocket'], }) const socket = new WebSocket('wss://example.com/socket', ['chat']) socket.onopen = () => { socket.send(JSON.stringify({ type: 'ping' })) } socket.onmessage = (event) => { console.log(event.data) } socket.onclose = (event) => { console.log(event.code, event.reason) } ``` ## 5. 主要导出 | 导出 | 说明 | | ---------------------------------------------------------- | ----------------------------------------------- | | `installWebRuntimeGlobals` | 按需安装 Web Runtime 全局对象 | | `installRequestGlobals` | 旧别名,兼容历史代码 | | `installAbortGlobals` | 仅安装 `AbortController` / `AbortSignal` | | `fetch` | 基于小程序请求能力适配的 `fetch` 实现 | | `HeadersPolyfill` / `RequestPolyfill` / `ResponsePolyfill` | HTTP 相关兼容类 | | `TextEncoderPolyfill` / `TextDecoderPolyfill` | 文本编解码兼容类 | | `URLPolyfill` / `URLSearchParamsPolyfill` | URL 相关兼容类 | | `WebSocketPolyfill` | 基于小程序 `SocketTask``WebSocket` 兼容实现 | | `XMLHttpRequestPolyfill` | XHR 兼容实现 | ## 6. 适用场景 - 在小程序环境中运行 `axios``fetch` 适配器 - 在小程序环境中运行 `graphql-request` - 在小程序环境中直接复用浏览器风格的 `WebSocket` 客户端代码 - 在小程序环境中运行依赖 `atob` / `btoa` / `queueMicrotask` / `performance.now` / `crypto.getRandomValues` 的工具库 - 给依赖 `URL` / `FormData` / `Blob` 的库补齐基础全局对象 ## 7. WebSocket 兼容说明 - 当前 `WebSocket` 兼容层底层桥接的是小程序 `SocketTask` - 支持 `new WebSocket(url, protocols?)``send``close``readyState``binaryType` - 支持 `onopen` / `onmessage` / `onerror` / `onclose` 以及 `addEventListener` - 当前不会模拟浏览器里完整的 `bufferedAmount`、协商后的 `protocol``extensions` - 如果运行时没有可用的 `connectSocket` 能力,构造时会直接抛错 ## 8. 本地开发 ```bash pnpm --filter @wevu/web-apis build pnpm --filter @wevu/web-apis test pnpm --filter @wevu/web-apis typecheck ``` ## 9. 相关链接 - `@wevu/api`:[../weapi/README.md](../weapi/README.md) - `wevu`:[../wevu/README.md](../wevu/README.md) ## 10. 兼容说明 - 新项目建议使用 `installWebRuntimeGlobals()` - `installRequestGlobals()` 仍保留为兼容别名,后续会逐步淡出文档主叙事