CLI后端云原生【免费下载链接】vercelDevelop. Preview. Ship.项目地址https://gitcode.com/gh_mirrors/ve/vercel点击查看免费下载vercel blob是 Vercel CLI 中用于管理 Vercel Blob 存储的子命令组覆盖文件上传put、下载get、列举list、删除del与复制copy以及 Blob Store 的创建、查询、删除与清空。本文以 storage.md 为骨架结合仓库内 CLI 源码token.ts、command.ts 等逐层拆解凭证解析顺序、两种认证模式、全部命令与参数以及 Agent/CI 场景下的--non-interactive行为帮助你在脚本、流水线与本地开发中可靠地使用 Blob 存储。命令总览一次掌握全部 Blob 操作vercel blob的核心职责是简单的文件存储——上传、列举与删除文件。以下是最常用的命令形式完整命令注册见 command.ts 中的blobCommand分发逻辑见 index.tsvercel blob put ./image.png --access public # 上传公开 vercel blob put ./image.png --access private --pathname images/photo.png # 自定义路径私有 vercel blob put ./large.zip --access public --multipart # 大文件分片上传 vercel blob get url-or-pathname --access public # 下载到 stdout vercel blob get url-or-pathname --access private --output ./out.bin # 保存到文件 vercel blob list # 列举所有 blob vercel blob list --prefix images/ # 按前缀过滤 vercel blob del url-or-pathname # 删除 vercel blob copy from-url to-pathname --access public # 复制关键约束--access在put、copy、get上是必填的合法值为public或private。若省略CLI 会直接报错Missing required --access flag并退出。这一校验由 access.ts 中的parseAccessFlag实现不仅缺失会报错传入public/private之外的任何值同样会以Invalid access value: .... Must be public or private.拒绝。另外值得注意del命令不需要--access在 command.ts 的delSubcommand中只有可选的--if-match因为删除动作只依赖凭证本身即可定位目标。认证模式五层凭证解析顺序vercel blob的凭证读取仅来自本地来源——它不会在运行时去查询已链接项目的关联 Store。即使你身处一个已经vercel link过的项目目录中只要本地没有凭证执行 blob 命令依然会得到No Vercel Blob credentials found错误。凭证解析的完整顺序由 token.ts 中的getBlobRWToken实现--rw-token token标志直接传入读写令牌read/write token。--oidc-token token--store-id id标志两者必须成对出现--store-id接受带或不带store_前缀的 ID源码中 getStoreIdFromAuth 会自动补全store_前缀。环境变量process.envBLOB_READ_WRITE_TOKEN或VERCEL_OIDC_TOKENBLOB_STORE_ID组合。.env.local文件从当前工作目录加载同样的三组变量加载逻辑见 token.ts读取失败时按空处理不影响流程。全部失败返回错误。对应的命令行用法vercel blob put ./image.png --access public --rw-token $BLOB_READ_WRITE_TOKEN vercel blob put ./image.png --access public --oidc-token $VERCEL_OIDC_TOKEN --store-id store_abc123若希望在不显式传 token 的情况下使用已链接项目的 Blob Store可以先用vercel link关联项目再拉取凭证到.env.localvercel link vercel env pull # 将 BLOB_READ_WRITE_TOKEN或 OIDC 变量写入 .env.local vercel blob put ./image.png --access public源码视角解析顺序的三条铁律细读 getBlobRWToken 可以发现三条值得注意的设计决策显式标志优先且互斥先尝试--rw-token命中即返回随后才检查--oidc-token/--store-id对。部分 OIDC 配置是硬错误无论标志还是环境变量只要VERCEL_OIDC_TOKEN与BLOB_STORE_ID或对应标志只出现其一就会直接报错——--oidc-token and --store-id must be passed together标志或VERCEL_OIDC_TOKEN and BLOB_STORE_ID must both be set, or both be unset环境变量绝不会静默降级为 RW token。源码注释明确说明这是对齐 AWS credential-provider 的行为。.env.local是兜底而非补充只有当process.env中没有完整的凭证组合时才会去读.env.local且两个来源内部遵循同样的优先级OIDC 完整 → RW token → 下探。标志的解析由findFlagValuetoken.ts完成它支持--flag value与--flagvalue两种写法标志重复时以最后一次出现为准。两种认证模式的选择RW Token 还是 OIDC每次vercel blob命令都需要某一个具体 Store的凭证。两种模式互斥适用场景截然不同模式凭证适用场景Read-write tokenBLOB_READ_WRITE_TOKEN内部编码了 Store ID脚本、CI、任何非交互式场景——长期有效OIDCVERCEL_OIDC_TOKEN和BLOB_STORE_ID同时使用针对已链接项目的本地开发——令牌短期有效解析优先级首个命中即生效显式标志--rw-token token或--oidc-token jwt --store-id store_…。两个 OIDC 标志必须成对——只传一个是错误不会回退到 RW token。环境变量先process.env后.env.local在每个来源内若VERCEL_OIDC_TOKEN/BLOB_STORE_ID只设置了其中一个属于硬错误部分 OIDC 配置绝不静默降级两者都设置 → OIDC否则若设置了BLOB_READ_WRITE_TOKEN→ RW token。已链接项目在连接了 Blob Store 的项目目录中执行vercel link或vercel env pull凭证会被拉取进.env.local。# 非交互式 / CI —— 优先使用 read-write token BLOB_READ_WRITE_TOKENvercel_blob_rw_… vercel blob list # OIDC —— Store ID 来自 BLOB_STORE_ID无需 --store-id 标志 VERCEL_OIDC_TOKEN… BLOB_STORE_IDstore_… vercel blob list⚠️ 重要提醒VERCEL_OIDC_TOKEN短期有效且会刷新。不要把它硬编码进脚本或长期保留的.env文件——捕获到的值一旦过期即失效。任何长时间运行或自动化的场景请改用BLOB_READ_WRITE_TOKEN。凭证如何转化为 SDK 调用参数拿到认证结果后blobOpts 负责把BlobRWToken转换为vercel/blobSDK 的选项对象RW 模式返回{ token }——SDK 从 token 中解析 Store ID服务端从 bearer 中解码OIDC 模式返回{ oidcToken, storeId }——SDK 2.4.0直接通过options.oidcToken接收 OIDC JWT并用storeId圈定调用范围。这里有意省略token把 OIDC JWT 塞进token会走parseStoreIdFromReadWriteToken流程产生畸形的 Store ID。文件操作命令详解参数与源码实现vercel blob put上传put是使用频率最高的命令位置参数为要上传的本地文件路径。除必填的--access外putSubcommand 还注册了以下选项标志简写默认值说明--add-random-suffix-rfalse给文件名追加随机后缀避免冲突--pathname-p文件名上传目标路径--multipart-utrue分片上传提升大文件性能与可靠性--content-type-t由扩展名推断覆盖 Content-Type--cache-control-max-age-c259200030 天Cache-Control 的 max-age 指令--allow-overwrite—false允许覆盖已存在的同名文件--if-match——仅当 blob 的 ETag 匹配该值时才执行操作从 put.ts 的实现看put还支持从 stdin 读取内容若省略文件参数且 stdin 不是 TTY会要求必须提供--pathname典型用法是cat file.txt | vercel blob put --pathname pathname若是 TTY 且未给文件则输出Missing input错误。上传成功后 CLI 打印返回的url。vercel blob put ./image.png --access public --pathname images/photo.png cat data.json | vercel blob put --access public --pathname data/config.json # stdin 上传vercel blob get下载get需要一个urlOrPathname位置参数。除--access外支持--output PATH保存到文件而非 stdout与--if-none-match ETag。参考 get.ts 的实现细节若响应状态码为304CLI 输出Not modified (304)并成功退出0内容默认经管道写入stdout指定--output时通过createWriteStream落盘并打印保存路径、大小bytes格式化与 Content-Type。vercel blob get url-or-pathname --access public vercel blob get url-or-pathname --access private --output ./out.binvercel blob list列举list无位置参数选项见 listSubcommand标志简写默认值说明--limit-l10最大1000每页返回数量--cursor-c—上一页返回的游标用于翻页--prefix-p—按路径前缀过滤--mode-mexpandedfolded或expandedlist.ts 的实现会把结果渲染成表格列Uploaded At / Size / Pathname / URL并在存在下一页时打印提示To display the next page run vercel blob list … --cursor cursor。翻页时保留除--cursor外的原有参数即可。若 Store 为空输出No blobs in this store。vercel blob list --prefix images/ --limit 50 vercel blob list --prefix images/ --cursor 上一页游标 # 翻页vercel blob del删除del需要一个urlsOrPathnames位置参数可传 URL 或 pathname唯一可选标志是--if-matchdelSubcommand。它在非交互式模式下直接删除、无需确认——这是与delete-store/empty-store的显著差异。vercel blob del url-or-pathnamevercel blob copy复制copy需要两个位置参数fromUrlOrPathname与toPathname必填--access可选--add-random-suffix、--content-type、--cache-control-max-age、--if-match见 copySubcommand。若位置参数少于两个copy.ts 会报Missing required arguments: vercel blob copy fromUrlOrPathname toPathname。vercel blob copy from-url to-pathname --access public进阶signed-token与presign除文档主线的六个文件操作命令外command.ts 还注册了两个可用于开放上传/下载能力的命令供有需求的读者参考signed-token签发短时有效的签名令牌通过--pathname默认*、--operationget/head/put/delete可重复、--valid-for如15m、1h、7d或--valid-untilUnix 毫秒时间戳两者互斥圈定权限范围还可追加--allowed-content-type与--maximum-size-in-bytes最大 5TB约束上传内容。presign为指定 pathname 生成预签名 URL默认操作为get--operation put时可配合--allowed-content-type、--maximum-size-in-bytes、--allow-overwrite、--cache-control-max-age等约束也支持用signed-token的输出--delegation-token--client-signing-token生成带委托签名的 URL。vercel blob signed-token --pathname media/photo.jpg --operation get vercel blob presign uploads/image.jpg --access private --operation put --allowed-content-type image/* --maximum-size-in-bytes 10485760Store 管理创建、查询、删除与清空Blob 文件归属于 Store存储桶vercel blob提供一组 Store 生命周期命令注册于 command.tsvercel blob create-store my-store --access private # 创建新 Store vercel blob get-store store-id # 查看 Store 详情 vercel blob delete-store store-id --yes # 删除 Store vercel blob empty-store --yes # 清空当前选中 Store 的全部 blob vercel blob list-stores --all --json # 以 JSON 列出团队全部 Store vercel blob list-stores --no-projects # 表格输出时隐藏 Projects 列create-store创建并可选链接项目create-store的位置参数name可选交互模式下会提示输入且要求至少 5 个字符。除--access外支持--region regionStore 所在区域默认iad1如--region cdg1--yes创建后自动链接到当前项目链接到全部环境--environment ENV可重复指定链接的环境production、preview、development。从 store-add.ts 的实现看创建通过POST /v1/storage/stores/blob完成若当前目录已链接项目创建成功后会询问是否把 Store 链接到该项目确认后调用connectResourceToProject连接并自动执行envPullCommandLogic把凭证写入.env.local——这正好衔接了前文链接项目 → 凭证落盘的流程# 创建 Store 并链接到当前项目的 production / preview 环境CI 友好 vercel blob create-store my-store --access private --yes --environment production --environment previewlist-stores列出与查看list-stores支持--all列出团队全部 Store而不只是当前项目关联的、--json机器可读输出与--no-projects表格模式隐藏 Projects 列。参考 store-list.ts 的实现未传--all且目录已链接项目时会过滤出该项目关联的 Store通过projectsMetadata匹配--json输出包含id、name、region、size、count、billingState、status、createdAt、updatedAt及projects数组表格输出在交互式 TTY 下会先弹出 Store 选择器进入详情页。--all与--json组合适合脚本消费。vercel blob list-stores --all --json # 脚本消费全部 Store 的 JSON 摘要 vercel blob list-stores --no-projects # 人读隐藏 Projects 列非交互式模式Agent 与 CI 的可靠执行语义--non-interactive是一个全局标志见 global-options.md它告知所有vercel blob子命令绝不弹提示。当检测到 Agent 且 stdin 不是 TTY 时该标志会被自动设置因此 Agent 通常无需显式传入如需在 Agent 检测下强制启用交互提示可传--non-interactivefalse。在该模式下命令永远不会阻塞等待输入。任何本该提示获取的内容都会变成 fail-fast 的结构化 JSON 错误输出到 stdout并以非零码退出——既不挂起也不静默猜测{status:error,reason:…,message:…}错误通常会附带建议的next命令。两种典型reasonreason: missing_arguments—— 本应通过提示补全的必填值缺失。例如create-store缺名称或--access、get-store/delete-store缺 store id。解法把值作为参数/标志显式传入。reason: confirmation_required—— 操作需要显式同意破坏性的delete-store与empty-store以及create-store在会链接到当前项目时。解法预先传--yes确认create-store也可用--environment指定链接目标。--yes与--non-interactive相互独立这是最容易踩坑的一点--non-interactive抑制提示但绝不代表同意因此上述破坏性/链接类操作仍需单独传--yes。--yes是按命令声明的仅确认变更的命令拥有如blob delete-store而--non-interactive是全局的。行为总结只读/幂等命令list、get、list-stores直接执行——其中list-stores会跳过交互式 Store 选择器而不是弹窗del直接删除无需确认delete-store、empty-store、会触发项目链接的create-store必须显式传--yes。# Agent / CI所有必填值都走标志破坏性操作带 --yes vercel blob create-store my-store --access private --yes # --yes 同时完成项目链接 vercel blob delete-store store-id --yes vercel blob empty-store --yes端到端实战从建 Store 到 CI 脚本将上述知识点串联成一个可落地的完整流程创建并链接 Store交互式开发环境vercel link vercel blob create-store my-store --access private --yes --environment production --environment preview创建成功的同时会把BLOB_READ_WRITE_TOKEN或 OIDC 变量写入.env.local。验证凭证与基本操作vercel blob list # 读取 .env.local 中的凭证应输出 No blobs in this store vercel blob put ./logo.png --access public --pathname assets/logo.png vercel blob list --prefix assets/ vercel blob get assets/logo.png --access public --output ./logo-copy.png写入 CI / Agent 脚本不再依赖交互与项目链接显式提供全部必填项并确认破坏性操作export BLOB_READ_WRITE_TOKEN$BLOB_READ_WRITE_TOKEN # 从 CI Secret 注入长期有效 vercel blob put ./dist.zip --access private --multipart --non-interactive vercel blob empty-store --yes --non-interactive小结vercel blob的设计核心是凭证先行、显式优先五层本地凭证解析标志 → 进程环境 →.env.local保证脚本可重复执行RW token 与 OIDC 的互斥模式分别服务长期自动化与短期本地开发--non-interactive配合结构化 JSON 错误让 Agent/CI 永远 fail-fast 而非挂起。结合本文引用的源码token.ts、command.ts 及各子命令实现你既可以在终端中熟练操作也可以把这些语义安全地嵌入自动化流水线。赞分享CLI后端云原生【免费下载链接】vercelDevelop. Preview. Ship.项目地址https://gitcode.com/gh_mirrors/ve/vercel点击查看免费下载相关推荐最完整 React 故事组件教程从基础到高级实现 Instagram 风格故事流最完整 React 故事组件教程从基础到高级实现 Instagram 风格故事流 你还在为 React 应用实现 Instagram 风格故事流烦恼吗从基础示例工程前端后端Vercel CLI 非交互式 link 实战从 agent eval 看 --yes / --non-interactive 的用法与验证Vercel CLI 非交互式 link 实战从 agent eval 看 yes / non interactive 的用法与验证 vercel linkCLI后端云原生Cal.com App Store CLI 非交互式创建命令完全指南模板、参数与实现原理Cal.com App Store CLI 非交互式创建命令完全指南模板、参数与实现原理 导读 本文讲解 cal.diyCal.com 开源调度平台App后端前端企业应用上一篇图吧工具箱TubaWinUi3开发指南如何基于WinUI 3构建现代化Windows桌面应用下一篇Temporal Python SDK与机器学习模型部署工具创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
