ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Vercel CLI 非交互式构建实战:`vercel build --yes` 的 Eval 场景与底层实现

Vercel CLI 非交互式构建实战:`vercel build --yes` 的 Eval 场景与底层实现 CLI后端云原生【免费下载链接】vercelDevelop. Preview. Ship.项目地址https://gitcode.com/gh_mirrors/ve/vercel点击查看免费下载本篇技术指南围绕 Vercel 开源仓库中packages/cli/evals/evals/build/目录下的PROMPT.md任务说明展开核心主题是在自动化Agent / CI环境中以非交互方式完成vercel build构建。你将掌握vercel build --yes/-y/--non-interactive的完整用法、它背后的 Eval 测试断言方式以及 CLI 构建命令在源码层面的参数解析与自动pull行为从而在无人值守场景中稳定完成 Vercel 项目构建。任务文档概述PROMPT.md 究竟要求什么关联文档packages/cli/evals/evals/build/PROMPT.md全文共两条指令Link this directory to Vercel (if needed) and build it.Use anon-interactivebuild command so it completes without prompts—e.g.vercel build --yesorvercel build -y.翻译过来是两件事如需要先把当前目录链接link到 Vercel然后执行构建必须使用非交互式构建命令让命令在没有提示的情况下自动完成例如vercel build --yes或vercel build -y。这不是一份泛泛的命令手册而是 Vercel CLI Eval评估体系中名为build的测试夹具fixture。它被递归发现并交由vercel/agent-eval执行用于验证 AI Agent 是否能在沙箱目录中自主完成「链接 构建」任务并自动选择非交互标志。下面从仓库源码逐步展开这条任务链路的每个环节。一、Build Eval 夹具的组成与断言逻辑一个完整的 Eval fixture 由三个文件组成见packages/cli/evals/README.md中的结构说明递归发现规则为「任意同时包含PROMPT.mdEVAL.tspackage.json的目录」文件作用PROMPT.md给 Agent 的任务指令即上文两句话EVAL.ts基于 Vitest 的自动化断言验证 Agent 是否完成任务package.json声明build脚本与vitest依赖EVAL.ts 的两个核心断言packages/cli/evals/evals/build/EVAL.ts中定义了两个测试断言一构建必须真实成功。它检查.vercel/output目录存在并且该目录下存在config.json或builds.jsontest(build completed successfully, () { const outputDir .vercel/output; expect(existsSync(outputDir)).toBe(true); expect( existsSync(${outputDir}/config.json) || existsSync(${outputDir}/builds.json) ).toBe(true); });这是vercel build成功执行的直接产物证据CLI 会把构建结果写入.vercel/output并生成config.jsonBuild Output API 配置或builds.json旧式构建产物清单。断言二Agent 必须使用非交互式标志。它读取__agent_eval__/results.json中由观测层o11y记录的 shell 命令过滤出vercel build/vc build命令并检查其中是否包含--yes、-y或--non-interactiveconst hasNonInteractive buildCommands.some(command { return ( command.includes(--yes) || /\s-y(\s|$)/.test(command) || command.endsWith(-y) || command.includes(--non-interactive) ); }); expect(hasNonInteractive).toBe(true);注意这里的匹配细节-y不仅要求出现还要求是独立参数前后有空格或位于命令末尾避免把--yes之类的长参数误判。EVAL.ts顶部注释也明确说明了设计意图we expect the agent to have run a successful build and to have used a non-interactive flag, as observed from the recorded shell commands.夹具的其余文件packages/cli/evals/evals/build/package.json一个极简的静态站点包build脚本仅为echo ok意味着该 Eval 不依赖真实前端框架聚焦验证「链接 构建 非交互」这一 CLI 行为本身packages/cli/evals/evals/build/index.html一个仅含标题Build Eval的占位 HTML作为静态站点的入口。二、为什么必须用非交互式标志prompt 阻塞的代价vercel build在本地缺少项目设置或目录尚未链接时会进入交互式提问例如询问要链接到哪个团队、哪个项目、是否覆盖现有设置。在人类终端里这没有问题但在以下两类场景中会直接卡死AI Agent / 自动化脚本执行命令在等待 stdin 输入而 Agent 不会也不应去模拟输入任务超时失败CI/CD 流水线无 TTY 环境下交互提示通常直接导致命令失败。PROMPT.md特意强调 so it completes without prompts正是要训练 Agent 养成「先想清楚环境是否已就绪再用非交互标志兜底」的习惯。同仓库的non-interactiveEval指令为 Link this directory to the Vercel team and project using the Vercel CLI.则从vercel link的角度验证了同样的原则其EVAL.ts断言.vercel/project.json或.vercel/config.json已生成且链接命令同样使用了--yes/-y/--non-interactive。两个 Eval 相互印证从link到build非交互是自动化场景的标配行为。三、源码级原理vercel build如何响应--yes3.1 标志的注册packages/cli/src/commands/build/command.ts中build命令复用了通用选项projectOption与yesOptionimport { projectOption, yesOption } from ../../util/arg-common; // ... ...yesOption,yesOption定义了--yes等价-y标志作用是跳过确认提示。3.2 标志的读取与追踪packages/cli/src/commands/build/index.ts中telemetryClient.trackCliFlagYes(parsedArgs.flags[--yes]); // ... const yes Boolean(parsedArgs.flags[--yes]);CLI 将--yes解析为布尔值并参与后续决策同时它还会被上报到遥测用于统计该标志的使用情况trackCliFlagYes。3.3 无项目设置时的自动 pull构建命令在本地缺少项目设置时行为取决于是否携带--yes。源码中的提示信息揭示了完整逻辑packages/cli/src/commands/build/index.tsNo project settings found locally. Run pull to retrieve them, or re-run with --yes to pull automatically.即无--yes时命令提示开发者手动执行vercel pull --yes --environment target来获取项目设置带--yes时build会自动完成pull将项目设置.vercel/project.json、环境变量等拉取到本地后继续构建。这正是PROMPT.md中 Link this directory to Vercel (if needed) 的自动化实现——目录未链接时--yes会驱动 CLI 自动建立链接与设置。3.4 非交互模式的认证要求同一段源码还指出pull --yes // ... In non-interactive mode, set VERCEL_TOKEN for authentication.在非交互/无 TTY 环境下CLI 无法弹出浏览器登录因此必须预先设置VERCEL_TOKEN长期访问令牌来完成认证。这也是运行 Eval 的必要前提之一——packages/cli/evals/README.md明确要求提供VERCEL_TOKEN或VERCEL_OIDC_TOKEN。四、把 Build Eval 跑起来Eval Runner 全流程4.1 运行入口与三条命令Eval 由packages/cli/evals/run.ts驱动在packages/cli/目录下有三条常用命令见 README# 1. 预演只打印将运行哪些 eval不产生 API 调用、不需要凭据 pnpm test:evals:dry # 2. 本地夹具生成 dashboard 可读取的结果形状不运行 Agent pnpm test:evals:local-fixture # 3. 真实运行需要 AI_GATEWAY_API_KEY 与 VERCEL_TOKEN / VERCEL_OIDC_TOKEN pnpm test:evals4.2 递归发现与子集选择run.ts中的discoverEvals()递归扫描packages/cli/evals/evals/命中「PROMPT.mdEVAL.tspackage.json三者齐备」的目录即登记为一个 eval。若一个都没找到则直接退出码 0否则调用vercel/agent-eval。只跑build这一个 eval 时cd packages/cli CLI_EVAL_EVALSbuild pnpm test:evals环境变量CLI_EVAL_EVALS逗号分隔列表用于筛选CLI_EVAL_EXCLUDE用于排除例如跳过需要 marketplace 资源的 fixture。run.ts中的selectEvals()会先取交集再过滤排除项。4.3 OIDC 令牌填充与变体矩阵真实运行时run.ts会先在sandbox-project目录执行vc env pull -y来尝试填充 OIDC 令牌若失败且存在VERCEL_TOKEN则降级使用令牌模式并只运行cli实验。随后 runner 会构建「项目模式 × 技能模式 × 认证状态」的变体矩阵逐变体执行 setup hooks →npx --yes vercel/agent-evallatest→ destroy hooks清理临时项目。README 还提到若未设置CLI_EVAL_PROJECT_IDrunner 会为每次运行创建临时项目、链接沙箱并在结束后删除。4.4 凭据要求运行真实 Eval 需要packages/cli/evals/README.md的 Getting credentials 一节环境变量用途AI_GATEWAY_API_KEYAgent 与结果分类器调用所需VERCEL_TOKEN或VERCEL_OIDC_TOKENVercel API 认证与沙箱操作五、实践建议在自动化环境中正确使用非交互构建综合上述文档与源码可以总结出在 Agent 或 CI 场景下执行vercel build的推荐姿势首选长标志并显式化vercel build --yes。相比-y长标志在日志与审计中可读性更强如果环境变量里已配置好令牌与项目设置它不会产生任何交互。目录未链接时不必手动vercel link--yes会驱动 CLI 自动完成必要的链接与pull对应PROMPT.md中 Link this directory to Vercel (if needed)。若希望更可控也可先显式执行vercel link --yes再执行vercel build --yes。确保认证先行非交互模式下 CLI 无法弹浏览器务必预先设置VERCEL_TOKEN或使用 OIDC否则命令会因无法认证而失败。用输出目录验证结果构建成功后检查.vercel/output下是否生成了config.json或builds.json——这与EVAL.ts的断言一致可作为 CI 中断言构建产物的标准方式。本地预演再跑真实 Eval先pnpm test:evals:dry确认夹具发现与变体矩阵符合预期再设置凭据执行CLI_EVAL_EVALSbuild pnpm test:evals。结语packages/cli/evals/evals/build/PROMPT.md虽然只有两句话却完整定义了一个可自动验证的端到端场景链接 → 非交互构建 → 产物断言。配合 EVAL.ts 的 Vitest 断言、run.ts 的 runner 逻辑以及build命令源码 对--yes的处理你可以把这条链路直接迁移到自己的自动化流程中以vercel build --yes作为无人值守构建的标准命令以.vercel/output的config.json/builds.json作为成功判据让 Agent 与 CI 都能稳定、可观测地完成 Vercel 项目构建。赞分享CLI后端云原生【免费下载链接】vercelDevelop. Preview. Ship.项目地址https://gitcode.com/gh_mirrors/ve/vercel点击查看免费下载相关推荐Vercel CLI 非交互式 link 实战从 agent eval 看 --yes / --non-interactive 的用法与验证Vercel CLI 非交互式 link 实战从 agent eval 看 yes / non interactive 的用法与验证 vercel linkCLI后端云原生Vercel CLI Eval 实战用 vercel env add 以非交互方式添加环境变量Vercel CLI Eval 实战用 vercel env add 以非交互方式添加环境变量 导读 本篇文章围绕 Vercel 开源仓库中 packagesCLI后端云原生Vercel CLI 的 vercel inspect 命令Agent Eval 评估场景实战指南Vercel CLI 的 vercel inspect 命令Agent Eval 评估场景实战指南 vercel inspect 别名 vc inspectCLI后端云原生创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表