功能标志
规则
- 使用功能标志进行渐进式发布——先将代码置于标志之后,再逐步启用
- 标志类型:布尔型(开/关)、百分比型(10%的用户)、用户定位型(特定ID/分段)
- LaunchDarkly 用于企业级,Flagsmith 用于开源,Vercel Flags 或
@vercel/flags 用于 Next.js
- 默认在服务端评估标志——仅将标志值传递给客户端,绝不传递评估逻辑
- 标志命名规范:
enable-new-checkout、show-pricing-v2 —— 描述性强,使用 kebab-case
- 完全发布后清理标志——过时的标志是技术债务;设置过期日期
- 百分比发布:对用户 ID 进行哈希处理以实现一致的分配——同一用户始终看到相同的变体
- 新功能默认关闭标志——若标志服务不可用,则安全降级
- 使用标志进行 A/B 测试:定义变体、跟踪转化事件、测量统计显著性
- 将标志重写存储在环境变量中,用于本地开发
模式
import { flag } from "@vercel/flags/next";
export const showNewCheckout = flag({
key: "show-new-checkout",
decide: () => false,
});
const enabled = await showNewCheckout();
import * as ld from "@launchdarkly/node-server-sdk";
const client = ld.init(process.env.LAUNCHDARKLY_SDK_KEY!);
const showFeature = await client.variation("new-checkout", user, false);
避免事项
- 在无标志的情况下发布功能——每个新功能都应可切换
- 嵌套标志依赖——保持标志逻辑扁平且独立
- 在 100% 发布后仍将标志保留在代码中——计划在两周内清理
- 在客户端评估标志而暴露目标规则——在服务端评估,发送结果