Feature Flags

react/react/.claude/skills/feature-flags

作者 reactb618bbb44226無授權條款250K 個星標收錄於 2026年10月8日更新於 2026年10月8日儲存庫昨天更新

Use when feature flag tests fail, flags need updating, understanding @gate pragmas, debugging channel-specific test failures, or adding new flags to React.

AI 產生的概覽

指導 React 貢獻者處理功能旗標檔案、@gate 測試閘控、新增旗標,以及偵錯特定通道的測試失敗。

功能
此技能說明 React 功能旗標如何在預設檔案與各通道 fork 檔案中組織,以及如何透過 @gate 編譯指示或行內 gate() 斷言對測試進行閘控。它提供新增旗標的逐步流程,包括在 fork 檔案中設定 VARIANT 值。它也介紹以 /flags 檢視旗標狀態,以及診斷特定通道的測試失敗。
適用情境
當功能旗標測試失敗、旗標需要更新、需要理解 @gate 編譯指示、偵錯特定通道的測試失敗,或要為 React 新增旗標時使用。
執行需求
不隨附指令碼,僅為說明文件。它假定已有 React 儲存庫簽出,包含功能旗標檔案與測試工具,並引用 /flags、/test 等指令。

React Feature Flags

Flag Files

FilePurpose
packages/shared/ReactFeatureFlags.jsDefault flags (canary), __EXPERIMENTAL__ overrides
packages/shared/forks/ReactFeatureFlags.www.jswww channel, __VARIANT__ overrides
packages/shared/forks/ReactFeatureFlags.native-fb.jsReact Native, __VARIANT__ overrides
packages/shared/forks/ReactFeatureFlags.test-renderer.jsTest renderer

Gating Tests

@gate pragma (test-level)

Use when the feature is completely unavailable without the flag:

javascript
// @gate enableViewTransitionit('supports view transitions', () => {  // This test only runs when enableViewTransition is true  // and is SKIPPED (not failed) when false});

gate() inline (assertion-level)

Use when the feature exists but behavior differs based on flag:

javascript
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');  }});

Adding a New Flag

  1. Add to ReactFeatureFlags.js with default value
  2. Add to each fork file (*.www.js, *.native-fb.js, etc.)
  3. If it should vary in www/RN, set to __VARIANT__ in the fork file
  4. Gate tests with @gate flagName or inline gate()

Checking Flag States

Use /flags to view states across channels. See the flags skill for full command options.

__VARIANT__ Flags (GKs)

Flags set to __VARIANT__ simulate gatekeepers - tested twice (true and false):

bash
/test www <pattern>              # __VARIANT__ = true/test www variant false <pattern> # __VARIANT__ = false

Debugging Channel-Specific Failures

  1. Run /flags --diff <channel1> <channel2> to compare values
  2. Check @gate conditions - test may be gated to specific channels
  3. Run /test <channel> <pattern> to isolate the failure
  4. Verify flag exists in all fork files if newly added

Common Mistakes

  • Forgetting both variants - Always test www AND www variant false for __VARIANT__ flags
  • Using @gate for behavior differences - Use inline gate() if both paths should run
  • Missing fork files - New flags must be added to ALL fork files, not just the main one
  • Wrong gate syntax - It's gate(flags => flags.name), not gate('name')

來源與署名

來源:react/react位於.claude/skills/feature-flags提交b618bbb

授權條款: 無授權條款

內容歸原作者所有。SourceWeft 從公開儲存庫中收錄這些內容。

檢舉或申請下架