关于 feature-flags
用于 React 仓库开发的功能标志技能,说明如何在不同构建分支维护标志,并据标志状态编写和运行测试。
主要功能
- 01维护默认及分支标志文件
- 02使用 @gate 控制测试运行
- 03用 gate() 验证不同标志行为
- 04检查渠道标志状态与差异
- 05测试 __VARIANT__ 的两种状态
适用场景
- 01为 React 新功能添加标志
- 02区分功能关闭与行为变化的测试
- 03排查特定渠道的测试失败
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ react/ react --skill feature-flags安装后在 Claude Code 中输入/feature-flags确认已加载。
详细介绍
React 功能标志
标志文件
| 文件 | 用途 |
|---|---|
packages/shared/ReactFeatureFlags.js | 默认标志(canary),__EXPERIMENTAL__ 覆盖项 |
packages/shared/forks/ReactFeatureFlags.www.js | www 通道,__VARIANT__ 覆盖项 |
packages/shared/forks/ReactFeatureFlags.native-fb.js | React Native,__VARIANT__ 覆盖项 |
packages/shared/forks/ReactFeatureFlags.test-renderer.js | 测试渲染器 |
测试门控
@gate pragma(测试级)
当功能在未启用标志时完全不可用,请使用:
// @gate enableViewTransition
it('supports view transitions', () => {
// This test only runs when enableViewTransition is true
// and is SKIPPED (not failed) when false
});
内联 gate()(断言级)
当功能存在,但行为会根据标志而变化时,请使用:
it('renders component', async () => {
await act(() => root.render(<App />));
if (gate(flags => flags.enableNewBehavior)) {
expect(container.textContent).toBe('new output');
} else {
expect(container.textContent).toBe('legacy output');
}
});
添加新标志
- 在
ReactFeatureFlags.js中添加,并设置默认值 - 在每个 fork 文件(
*.www.js、*.native-fb.js等)中添加 - 如果它在 www/RN 中应有所不同,请在 fork 文件中将其设为
__VARIANT__ - 使用
@gate flagName或内联gate()对测试进行门控
检查标志状态
使用 /flags 查看各通道的状态。完整命令选项请参阅 flags 技能。
__VARIANT__ 标志(GKs)
设为 __VARIANT__ 的标志会模拟 gatekeeper——分别测试两次(true 和 false):
/test www <pattern> # __VARIANT__ = true
/test www variant false <pattern> # __VARIANT__ = false
调试特定通道的故障
- 运行
/flags --diff <channel1> <channel2>比较值 - 检查
@gate条件——测试可能仅对特定通道启用 - 运行
/test <channel> <pattern>以隔离故障 - 如果是新添加的标志,请确认它存在于所有 fork 文件中
常见错误
- 忘记测试两种变体——对于
__VARIANT__标志,始终测试www和www变体为 false 两种情况 - 用 @gate 处理行为差异——如果两种路径都应运行,请使用内联
gate() - 遗漏 fork 文件——必须将新标志添加到所有 fork 文件中,而不仅是主文件
- 门控语法错误——正确写法是
gate(flags => flags.name),而不是gate('name')
评论
支持 Markdown