gating
gating オプションは条件付きコンパイルを有効にし、最適化されたコードがランタイムでいつ使用されるか制御できるようにします。
{
gating: {
source: 'my-feature-flags',
importSpecifierName: 'shouldUseCompiler'
}
}リファレンス
gating
コンパイルされた関数に対する、ランタイムのフィーチャーフラグによる制御を設定します。
Type
{
source: string;
importSpecifierName: string;
} | nullデフォルト値
null
Properties
source:フィーチャーフラグをインポートするモジュールパスimportSpecifierName:インポートするエクスポートされた関数の名前
注意点
- ゲーティング関数はブーリアンを返す必要があります。
- コンパイル済みバージョンと元のバージョンの両方を含めるため、バンドルサイズが増加します。
- コンパイルされた関数を含むすべてのファイルでインポートされます。
使用法
基本的なフィーチャーフラグのセットアップ
- フィーチャーフラグモジュールを作成します。
// src/utils/feature-flags.js
export function shouldUseCompiler() {
// your logic here
return getFeatureFlag('react-compiler-enabled');
}- コンパイラを設定します。
{
gating: {
source: './src/utils/feature-flags',
importSpecifierName: 'shouldUseCompiler'
}
}- コンパイラがゲーティング済みのコードを生成します。
// Input
function Button(props) {
return <button>{props.label}</button>;
}
// Output (simplified)
import { shouldUseCompiler } from './src/utils/feature-flags';
const Button = shouldUseCompiler()
? function Button_optimized(props) { /* compiled version */ }
: function Button_original(props) { /* original version */ };ゲーティング関数はモジュール評価時に一度だけ評価されることに注意してください。JS バンドルがパース・評価された時点でコンポーネントの選択が固定され、ブラウザセッションが持続する間、静的に維持されます。
トラブルシューティング
フィーチャーフラグが動作しない
フラグモジュールが正しい関数をエクスポートしているか確認してください。
// ❌ Wrong: Default export
export default function shouldUseCompiler() {
return true;
}
// ✅ Correct: Named export matching importSpecifierName
export function shouldUseCompiler() {
return true;
}インポートエラーが発生する
ソースのパスが正しいことを確認してください。
// ❌ Wrong: Relative to babel.config.js
{
source: './src/flags',
importSpecifierName: 'flag'
}
// ✅ Correct: Module resolution path
{
source: '@myapp/feature-flags',
importSpecifierName: 'flag'
}
// ✅ Also correct: Absolute path from project root
{
source: './src/utils/flags',
importSpecifierName: 'flag'
}