@crvouga/mockingbird-service-vercel-blob

中文文档
1.12.0发布于 2026/11/13MITTypeScriptES Module构建来源已验证近 30 天下载 1990

Stateful Vercel Blob模拟器:二进制上传,公开下载,元数据,光标列表和多部分承诺.

中文使用文档
文档目录7 节
  1. 安装
  2. 使用量
  3. 路线和行为
  4. 控制和失败
  5. API 密码
  6. 甲骨文和核查
  7. 故意不模拟

@crvouga/mockingbird-service-vercel-blob (英语)

本地模拟器。 真正的API合同. 部分 嘲笑鸟。 。 。 .

A 类 阴道 便携式 Vercel Blob 模拟器用未修改的 @vercel/blob 2.8.0 (中文(简体) ) SDK(英语:SDK). Blobs,多段上传,待取部件和合成下载赠款使用SQLite Collections,, 共享时钟、命名空间和时间线。 Fixtures只包含合成数据.

安装

bun add @crvouga/mockingbird-service-vercel-blob

使用量

该示例使用 @vercel/[email protected]它是一种可选的消费者依赖,而不是运行时间 模拟器的依赖性 .

import { del, put } from "@vercel/blob"
import { createServer } from "@crvouga/mockingbird-service-vercel-blob/server"
import { DEFAULT_TOKEN } from "@crvouga/mockingbird-service-vercel-blob"

// Test setup: the emulator, and the two variables the Blob SDK reads.
const server = await createServer()
process.env.VERCEL_BLOB_API_URL = `${server.url}/api/blob`
process.env.BLOB_READ_WRITE_TOKEN = DEFAULT_TOKEN

// The app's own Blob calls, unchanged.
const blob = await put("fixture.txt", "fixture bytes", { access: "public", addRandomSuffix: false })
console.log(await (await fetch(blob.url)).text()) // "fixture bytes"
await del(blob.url)
await server.close()

SDK的支持端点覆盖是 VERCEL_BLOB_API_URL (或 NEXT_PUBLIC_VERCEL_BLOB_API_URL) (中文(简体) ). 申请 BLOB_STORE_BASE_URL 必须为此绘制地图 SDK被应用程序所覆盖. 对于命名空间 suite,使用时 ${server.url}/__admin/ns/suite/api/blob,一个 x-mockingbird-namespace: suite 页眉,或注册 固定符号 PUT /__admin/credentials。除非 fixtures: [{ pathname, bytes: string | number[], contentType?, cacheControlMaxAge?, storeId? }] 提供. tokens 映射用于存储 ID 的合成接线符; 默认值 DEFAULT_TOKEN (单位:千美元)vercel_blob_rw_fixture_fixture地图到 fixture。无效或缺失的令牌返回供应商 403 { error: { code: "forbidden", message: "Access denied" } }。 。 。 .

SDK接受字符串,缓冲, Blob 和流. 其多段帮助者不接受原始 Uint8Array 键入 PutBody把它包入Blob或缓冲器 模拟器的 HTTP 上传处理器 保存生质 Uint8Array 请求正文以及字符串和任意二进制字节.

路线和行为

运行SDK线端点行为
点球PUT /api/blob/?pathname=…Raw 字节; 公共访问、 内容类型、 缓存 TTL、 可选随机后缀、 覆盖和ETag 先决条件
读取 BlobStoreGET /api/blob?url=…head() 元数据、大小、ETag和上传时间戳
读取 BlobStoreGET /api/blob?prefix=…&limit=…&cursor=…&mode=…list() 使用词典路径名排序并扩展/文件夹
复制块PUT /api/blob?pathname=…&fromUrl=…同存储副本; 目标内容类型独立推断, 除非提供
删除块POST /api/blob/delete{ urls: [...] }; 接受自己返回的 URL 或路径名; 缺失的 blobs 被忽略
多段卸载POST /api/blob/mpu?pathname=…x-mpu-action: create/upload/complete, SDK 密钥/上载ID/部分编号头
下载 Blob / 下载GET /__admin/blobs/{id} 编号 : HEAD合成公共字节传输; 精确字节, ETag, Content-Length/ Type, 缓存和下载处理

put() 财务报告和审定财务报表 copy() 返回时 { pathname, url, downloadUrl, contentType, contentDisposition, etag }。 。 。 . 上传回复确实如此 没有 包含大小; head() 并列出元数据。 复制 不覆盖返回供应商的路径名 400 bad_request 并保留现有的字节. 从原子角度覆盖对象并保留其URL。 有条件的写入/删除使用 x-if-match 返回时 412 precondition_failed ; 复制检查其 来源 ETAG (英语). 删除在删除之前验证所有先决条件。 没有供应商要求识别的复制 被发明: 正常的重复路径规则适用于重复点. ETags使用SHA-256,如Vercel的 已公布的模拟器;时间戳使用被注入的时钟。 默认缓存TTL为2,592,000秒.

缓存默认值为1,000个对象,按路径名排序(所以) file10 首页 file2)并发出 hasMore 仅当另一个页面存在时,加光标。 模拟光标使用最后一个路径名, 如下 Vercel的模拟器;他们的编码并不是对生产不透明的光标格式的声称. 折叠 模式返回与 blob 条目分开的即时文件夹.

多段串接从不发布部分对象 。 重新加载一个部分编号替换 待定部分。 完成 验证 ETags 、 递增的独特数字、 总大小和 记录除最后部分外所有部分的最低5个小米B/等大小,然后以解剖法发布. 相同的完成重放返回已有的上传结果 . maxBlobBytes 默认为 20 MiB并可以配置:这是明确的本地资源约束,而不是生产配额.

公共 URL 使用配置 publicOrigin 或上传请求的来源。 它们包含 在保留内字节运输树内明确命名空间查询和点。 他们 通过平面工作 fetch 超过服务听众或进程 emulator.fetch。带有习惯 adminPrefix,字节 URL 和每个控制路径一起迁移。 时间线分支呼叫器 还必须前进 x-mockingbird-branch 当获取其公共 URL 时。 有条件的公众读取 支助 If-None-Match / 304 (中文(简体) ). 这个本地的 URL 传输是一个站入,而不是一个Vercel CDN 主机名. SDK的车 get() 验证生产主机名, 所以使用纯度 fetch 用于本地下载.

控制和失败

所有服务控制都住在共享的旁边 /__admin/health, (中文(简体) ), /__admin/state, (中文(简体) ), /__admin/clock, (中文(简体) ), /__admin/reset, (中文(简体) ), /__admin/requests故障引擎和时间线控制. adminKey 使用该 共享 x-mockingbird-admin-key 配置时守护 。 日记记录元数据并触摸 身份证 永远不要上传尸体.

控制权目的
GET /__admin/store/blobsBlob 元数据, 不包括字节
POST /__admin/store/blobs种子 { pathname, bytes: string | number[], contentType?, cacheControlMaxAge?, storeId? }
GET /__admin/store/blobs/:id/bytes明确固定字节已读
GET /__admin/store/uploads等待/完成上传和部分元数据,不包括字节
POST /__admin/store/origin设定 { origin } 用于随后的上传和固定种子
POST /__admin/store/downloads创建合成 { blobId, expiresInMs } 下载赠款
POST /__admin/store/downloads/:id/expire立即终止赠款

合成赠与 URL 在共享时钟上过期并过期后返回 403; 普通公共 URL仍然公开. 这些控制不模拟生产签名协议. 预设 : conflict, (中文(简体) ), rate_limited (429 / 重试- 之后), truncated_upload, (中文(简体) ), partial_multipart, (中文(简体) ), server_error 财务报告和审定财务报表 network_reset每起火灾一次 启动 partial_multipart 创建后 上传,然后发送该部分失败;以前的部分仍然可供重试.

API 密码

便携式根导出 VercelBlobAPI, (中文(简体) ), createRuntime, (中文(简体) ), document, (中文(简体) ), supportedOperationIds, (中文(简体) ), VERCEL_BLOB_NAMESPACE, (中文(简体) ), VERCEL_BLOB_PRESETS, (中文(简体) ), DEFAULT_TOKEN, (中文(简体) ), DEFAULT_STORE_ID 财务报告和审定财务报表 DEFAULT_CACHE_MAX_AGE,加上固定/记录/上载/赠款/运行时间选项类型. VercelBlobAPI 曝光情况 fetch, (中文(简体) ), reset, (中文(简体) ), state, (中文(简体) ), metadata, (中文(简体) ), seed, (中文(简体) ), ensureSeeded, (中文(简体) ), app 财务报告和审定财务报表 sqlite。 。 。 . createRuntime 添加共享的 MockSurface 时钟、 故障引擎、 日记、 证书 注册、状态、命名空间和时间线控制。 节点 ./server 进口 createServer, (中文(简体) ), DEFAULT_PORT (8812个), serveTarget 和服务器类型; mockingbird-vercel-blob serve 开始一个听众.

甲骨文和核查

合同如下 Vercel的 SDK 文档, (中文(简体) ), 已发表 官方SDK 2.8.0,以及 Vercel的官方模拟器 Blob 路线在 e4cd051。 。 。 . 模拟器提供有线/有线/有线/清单的证据;它明确提供 没有 执行多部分, 和SDK文件的多部分规则.

bun test 运行 SDK, 二进制接受, 所有对等的 JSON 操作行走, 一个差异 实例检查、命名空间/重置/时钟/时间线和目录预设测试。 完成的SDK测试 put → public GET → overwrite → del 和手动/自动多部分 对抗这个包, 不修改 SDK 或联系Vercel。 双部分接受验证失败部分 将较早的部件保存完好,只有经过验证的完成才能显示对象. bun run parity 凉了 只读 : VERCEL_BLOB_API_URL 财务报告和审定财务报表 VERCEL_BLOB_READ_WRITE_TOKEN 必须指定一个空测试 存储。 缺少证书或无法空入/无法进入的商店2号出入口,从没有通过现场直播的结果.

故意不模拟

私人商店及其授权,客户端上传签名,生产CDN/域名 路线, SDK get() 生产 - 主机验证绕行,范围请求,图像优化, 供应商配额、跨储存副本、真实的账单和仪表板、不透明的生产光标 编码和无文件请求ID分解没有模型化. 赠款是合成的 时钟控制。 此软件包在正常操作中永远不会联系Vercel; 只有明确 认证的、只读的等同命令就是这样做的.

版本与发布记录

@crvouga/mockingbird-service-vercel-blob 共发布 19 个版本,首次发布于 2026/10/05;过去 12 个月发布了 19 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
1.12.0latest2026/11/131 天前
1.11.12026/11/122 天前
1.11.02026/11/122 天前
1.10.02026/11/113 天前
1.9.42026/11/0311 天前
1.9.32026/11/0311 天前

关于 @crvouga/mockingbird-service-vercel-blob 的常见问题

@crvouga/mockingbird-service-vercel-blob 是什么?

Stateful Vercel Blob模拟器:二进制上传,公开下载,元数据,光标列表和多部分承诺.

如何安装 @crvouga/mockingbird-service-vercel-blob?

在项目目录运行 npm install @crvouga/mockingbird-service-vercel-blob,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 mockingbird-vercel-blob,可以用 npx mockingbird-vercel-blob 直接运行。

@crvouga/mockingbird-service-vercel-blob 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@crvouga/mockingbird-service-vercel-blob 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@crvouga/mockingbird-service-vercel-blob 可以商用吗?

@crvouga/mockingbird-service-vercel-blob 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@crvouga/mockingbird-service-vercel-blob 的下载量有多少?

根据 npm 官方下载统计,@crvouga/mockingbird-service-vercel-blob 在 2026/10/11 – 2026/11/09 这 30 天内被下载 1,990 次,日均约 66 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@crvouga/mockingbird-service-vercel-blob 还在维护吗?

最新版本 1.12.0 发布于 2026/11/13(1 天前);至今共发布 19 个版本,其中过去 12 个月发布了 19 个;首次发布于 2026/10/05。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。