Vercel Flags 是 Vercel 的功能开关平台。开关在 Vercel 仪表板或通过 vercel flags CLI 创建和管理,在应用中服务端评估,并按环境(开发、预览、生产)切换而无需重新部署。
用途:
- 规划功能开关:决定开关类型(布尔、字符串、数字、JSON)、变体命名、键名、环境值、目标定位、回退值及移除计划。
- 创建和管理开关:使用 CLI 创建、检查、启用、设置、分割、发布、规则、归档等,无需修改代码。需要已认证的 Vercel CLI。
- 在代码中实现:根据技术栈选择集成方式。Next.js 或 SvelteKit 使用 Flags SDK(flags + @flags-sdk/vercel);其他框架或普通服务器使用 @vercel/flags-core;需要提供商可移植性或已使用 OpenFeature 时使用 Vercel Flags OpenFeature 提供商。
- 执行渐进式发布和 A/B 测试:通过 CLI 的 rollout 和 split 命令,基于稳定标识(如 user.id)进行分桶。
- 使用 Flags Explorer:Vercel Toolbar 面板列出应用开关,并允许通过由 FLAGS_SECRET 签名的 cookie 按浏览器覆盖开关。
主要能力:
- 支持布尔、字符串、数字、JSON 类型的开关。
- 按环境独立配置值或目标定位。
- 基于实体和属性的目标定位与百分比发布。
- 通过 CLI 管理开关生命周期,包括创建、检查、启用、禁用、设置、分割、发布、规则、段、归档、删除等。
- 提供 Flags SDK 用于 Next.js 和 SvelteKit,集成 Flags Explorer 和静态页面预计算。
- 提供 @vercel/flags-core 用于其他框架,在请求处理器中调用 evaluate() 或 bulkEvaluate()。
- 支持 OIDC 认证(在 Vercel 上)和 SDK 密钥(外部应用)。
- FLAGS_SECRET 用于签名 Flags Explorer 覆盖和预计算代码。
使用方式:
- 规划开关:遵循“规划开关”步骤,决定类型、变体、键名、环境、目标定位、回退和退出计划。
- 使用 CLI 管理:确保 Vercel CLI 已安装并认证(pnpm i -g vercel),使用 --project 和 --scope 指定目标,运行 vercel flags --help 查看子命令。常见流程包括创建、启用/禁用、发布、分割、规则、验证、退役。
- 代码实现:根据技术栈选择集成。Next.js/SvelteKit 加载 flags-sdk 技能;其他框架使用 @vercel/flags-core 创建客户端并在请求处理器中评估;OpenFeature 使用相应提供商。
- 认证:在 Vercel 上使用 OIDC,本地开发通过 vercel env pull 获取令牌;外部应用使用 SDK 密钥(FLAGS)。FLAGS_SECRET 按环境创建,用于签名覆盖和预计算。
- Flags Explorer:通过发现端点暴露开关,Flags SDK 自动生成;CLI 命令 vercel flags override 可生成相同 cookie 令牌。
适用场景:
- 将功能置于开关后。
- 渐进式发布到一定百分比用户。
- 对定价页面等进行 A/B 测试。
- 添加终止开关。
- 按环境切换功能。
- 需要提供商可移植性或已使用 OpenFeature 的项目。
限制:
- 开关类型创建后不可更改。
- CLI 管理需要已认证的 Vercel CLI,SDK 密钥和 vercel env pull 不是 CLI 前提条件。
- 若已使用其他开关提供商(Statsig、LaunchDarkly、PostHog、GrowthBook 等),应继续使用,Vercel Flags CLI 和生命周期部分不适用。
- 百分比发布或 A/B 分割需要稳定标识进行分桶,实体和属性需先在 Flags → Entities 中定义。
- 在非 Vercel 环境使用 @vercel/flags-core 时需传递 SDK 密钥。
- 避免在模块加载时初始化客户端,应在请求处理器中调用评估。
- 不要打印密钥到终端、日志或聊天。
- 归档、删除等操作需确认,用户批准后可传 --yes。
- 缺失事实:具体价格、收费模式、平台支持细节、效果数据等暂未提供。