@beignet/provider-storage-vercel-blob

中文文档
0.0.65发布于 2026/11/08MITTypeScriptES Module近 30 天下载 1824

Beignet 的 Vercel Blob 对象存储提供者

中文使用文档
文档目录11 节
  1. 安装
  2. 提供者设置
  3. 可见度
  4. 直接港口工厂
  5. 请求费用
  6. 逃逸舱门
  7. 开发工具
  8. 失败行为
  9. 直接上传
  10. 当地测试
  11. 部署说明

@beignet/producer-storage-vercel-blob (中文(简体) )

运行时间 : Beignet需要Node.js 22.12或更新. Bun是可选的.

Beignet 的 Vercel Blob 对象存储提供者

[叹息] Beignet是实验性的α软件. 这个 0.0.x 包行为早期 评估,且在框架结算时,API可能在发布之间发生变化.

此软件包适应 韦塞尔 Blob 改为 贝格纳的 StoragePort,所以在Vercel上部署的应用程序会获得耐用对象存储 没有手写适配器.

createVercelBlobStorageProvider(...) 返回稳定 VercelBlobStorageProvider 类型. VercelBlobConfig 描述其经验证的 配置; Zod schema 仍为内部.

安装

bun add @beignet/provider-storage-vercel-blob @vercel/blob@^2.8.0

@vercel/blob v2线内需要2.8.0或更新.

或脚手架的一切——依赖性,提供者接线,端口,env 例如, 并设置笔记——带有 CLI 预设:

bun beignet provider add storage-vercel-blob

提供者设置

// server/providers.ts
import { createVercelBlobStorageProvider } from "@beignet/provider-storage-vercel-blob";

export const providers = [
  // ...
  createVercelBlobStorageProvider(),
] as const;

提供者提供 ports.storage (标准贝格网) StoragePort(中文(简体) ) 财务报告和审定财务报表 ports.vercelBlob (一个逃生舱口,见下文). 配置来自 BLOB_* env vars 和,对于OIDC认证, VERCEL_OIDC_TOKEN数字 :

新闻 var含义
BLOB_READ_WRITE_TOKEN读写符. 以连接的 Blob 商店自动设定在 Vercel 部署上; 手动设置在其它位置 .
BLOB_ACCESS全库访问级别 : private (违约)或 public。 。 。 .
BLOB_KEY_PREFIX可选前缀适用于每个对象密钥.
BLOB_STORE_ID使用 Vercel OIDC 令牌认证时可选存储 ID .
VERCEL_OIDC_TOKEN使用 Vercel 提供的 OIDC 令牌 BLOB_STORE_ID 而不是一个读写符号.

本地存储通过切换可用设备继续以零设置工作 证书,同样通过环境扩展的费率限制提供者的工作方式:

import { createLocalStorageProvider } from "@beignet/provider-storage-local";
import { createVercelBlobStorageProvider } from "@beignet/provider-storage-vercel-blob";

const hasVercelBlobCredentials =
  Boolean(process.env.BLOB_READ_WRITE_TOKEN) ||
  Boolean(process.env.BLOB_STORE_ID && process.env.VERCEL_OIDC_TOKEN);

export const providers = [
  // Vercel Blob in deployed environments (local disk does not survive
  // serverless); the local provider keeps dev working with zero setup.
  hasVercelBlobCredentials
    ? createVercelBlobStorageProvider()
    : createLocalStorageProvider(),
] as const;

可见度

Vercel Blob 在写入时存储每个对象的访问, 但不会报告 返回从 head(...),因此这个适配器保持整个商店的制服: 对象共享配置 access 级别,和 a put(...) 请求a 不同 visibility 以错误而不是默默拒绝 后文中误报能见度. 运行两个供应商在两个 Blob 之上 当应用程序需要两个关卡时存储.

publicUrl(...) 返回 blob URL 为 public 储存和 null 页:1 private 商店。 通过授权此软件的应用路径为私人对象服务 文件记录和呼叫 createStorageDownloadResponse({ storage, key, fileName }) 从 @beignet/web 或者说 @beignet/next它流出一个不可取去的附件 返回时 null 用于丢失对象.

Vercel Blob没有任意的每个对象元数据,所以 StorageObject.metadata 总是报告为空。 缓存寿命图 Cache-Control max-age 给Vercel Blob的指示 cacheControlMaxAge 秒; 其他 指令无法幸存.

storage.temporaryUrl(key, { expiresInSeconds, fileName? }) 验证其投入 返回时 { status: "unsupported" } 不联系 Blob 或检查 存在。 使用授权的流线路径进行私人下载. 块 仅Pathname或私人 URL 不是一个授权的浏览器下载链接.

直接港口工厂

当您拥有供货商线路或需要第二家商店时使用直接工厂:

import { createVercelBlobStorage } from "@beignet/provider-storage-vercel-blob";

const storage = createVercelBlobStorage({
  access: "public",
  keyPrefix: "avatars",
  storeId: process.env.AVATARS_BLOB_STORE_ID,
  token: process.env.AVATARS_BLOB_TOKEN,
});

奥米 token 允许 @vercel/blob 读取 BLOB_READ_WRITE_TOKEN 从 环境. storeId 明确转发给每个 SDK 操作 OIDC认证商店;SDK读取 VERCEL_OIDC_TOKEN,而被包围 提供者地图 BLOB_STORE_ID 同一选项。 这个 client 选项接受 假SDK表面测试.

beignet doctor --strict 财务报告和审定财务报表 beignet preflight 接受读写 符号或完整 BLOB_STORE_ID 加号 VERCEL_OIDC_TOKEN 双人.

请求费用

有点 StoragePort 承诺需要额外的 Blob API 往返:

  • put(...) 发布后写作 head(...) 因为端口返回 权威存储对象,而不是输入的回声.
  • delete(...) 发布删除前 head(...) 因为Vercel Blob的相片 del(...) 不报告对象是否存在.

逃逸舱门

ports.vercelBlob 显示未整合的原始部件 覆盖 :

const { client, access, keyPrefix, storeId, objectKey, checkHealth } =
  ctx.ports.vercelBlob;

await client.list({ prefix: objectKey("exports"), limit: 100 });
const health = await checkHealth();

checkHealth() 问题的一个项目 list(...) 和报告 { ok, message?, metadata } 准备终点.

对象密钥和 keyPrefix 使用共享验证和前缀帮助符 @beignet/core/ports,保持 Blob 行为与内存,局部,和 S3存储.

get(...) 返回一发响应正文。 假设一个身体方法,或调用 await object.cancel() 当只检查元数据时, 无法读取回复 释放资源。 偏爱 stat(...) 只读元数据.

开发工具

何时 @beignet/devtools 安装在此提供者之前, 存储 业务出现在仪表板的存储监视器下。 提供者的记录 storage.put, (中文(简体) ), storage.get, (中文(简体) ), storage.stat, (中文(简体) ), storage.delete, (中文(简体) ), storage.exists,以及 storage.publicUrl 带有密钥、大小和 持续时间; 失败记录为 .failed 事件名称和原件 错误被重写 .

失败行为

缺少对象 null (单位:千美元)get, (中文(简体) ), stat, (中文(简体) ), publicUrl)或(或) false (单位:千美元)delete, (中文(简体) ), exists(b) —— BlobNotFoundError 永远逃不出港口 所有其他 SDK 错误在仪器事件后未修改重排, 包括 缺少脚本错误,所以错误的配置会响亮失败而不是 假装存储是空的.

直接上传

此软件包覆盖服务器代理存储 StoragePort. Vercel (中文(简体) ) Blob 的浏览器- 直接上传使用自己的客户端- 调试协议 (单位:千美元)@vercel/blob/client),这不符合Beignet的平面前名PUT UploadSignerPort; 使用 createS3UploadSigner 从 @beignet/provider-storage-s3 当直接上传是一项要求时,或 Vercel的客户SDK直接.

当地测试

继续测试 @beignet/provider-storage-local 或者说 createMemoryStorage() 从 @beignet/core/ports; 两者执行相同 端口 。 输入假 VercelBlobClient 通过 client编号 :createClient 选项以测试应用程序代码来对抗此适配器而无需网络访问.

部署说明

连接 Blob 商店到 Vercel 工程并配置一个证书路径 : 使用情况 BLOB_READ_WRITE_TOKEN,或使用 Vercel OIDC 与 VERCEL_OIDC_TOKEN 加号 BLOB_STORE_ID医生、供应商审计和飞行前验证 选项而不将读写符号作为唯一有效的路径; 运行 beignet preflight --connect 以证明配置的商店可以到达. 偏爱 private 存储, 除非对象是真实的世界可读的: 公共 blob URL是未经认证的并被长缝.

版本与发布记录

@beignet/provider-storage-vercel-blob 共发布 37 个版本,首次发布于 2026/07/06;过去 12 个月发布了 37 个版本。

版本发布日期距今
0.0.65latest2026/11/08今天
0.0.642026/11/034 天前
0.0.632026/11/026 天前
0.0.622026/11/017 天前
0.0.612026/11/017 天前
0.0.602026/11/017 天前

关于 @beignet/provider-storage-vercel-blob 的常见问题

@beignet/provider-storage-vercel-blob 是什么?

Beignet 的 Vercel Blob 对象存储提供者

如何安装 @beignet/provider-storage-vercel-blob?

在项目目录运行 npm install @beignet/provider-storage-vercel-blob,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:@vercel/blob(^2.8.0)、@beignet/core(>=0.0.3 <1.0.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@beignet/provider-storage-vercel-blob 支持 TypeScript 吗?

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

@beignet/provider-storage-vercel-blob 支持 ESM 还是 CommonJS?

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

@beignet/provider-storage-vercel-blob 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=22.12.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@beignet/provider-storage-vercel-blob 可以商用吗?

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

@beignet/provider-storage-vercel-blob 的下载量有多少?

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

@beignet/provider-storage-vercel-blob 还在维护吗?

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