著者:
    作成:2026-01-21最終更新:2026-01-21

    intlayerPrune Vite プラグイン ドキュメント

    intlayerPrune Vite プラグインは、アプリケーションのバンドルから未使用の辞書をツリーシェイクおよびプルーニングするために使用します。これにより、必要な多言語コンテンツのみを含めることで、最終的なバンドルサイズを削減できます。

    使用法

    intlayer() の一部として(推奨)

    Intlayer の設定を通じてプルーニングを有効にすると、メインプラグインがすべてを処理します:

    ts
    // intlayer.config.tsimport { defineConfig } from "intlayer";export default defineConfig({  build: {    optimize: true, // プルーニングと縮小化の両方を有効にします  },});
    ts
    // vite.config.tsimport { defineConfig } from "vite";import { intlayer } from "vite-intlayer";export default defineConfig({  plugins: [intlayer()],});

    スタンドアロン

    プラグインスタックを手動で構成している場合、intlayerPruneintlayerMinifyPruneContext オブジェクトを共有します。このオブジェクトは一度作成して、両方に渡す必要があります:

    ts
    // vite.config.tsimport { defineConfig } from "vite";import { intlayerPrune, intlayerMinify } from "vite-intlayer";import { createPruneContext } from "@intlayer/babel";import { getConfiguration } from "@intlayer/config/node";const intlayerConfig = getConfiguration();const pruneContext = createPruneContext();export default defineConfig({  plugins: [    intlayerPrune(intlayerConfig, pruneContext),    intlayerMinify(intlayerConfig, pruneContext), // オプション、同じコンテキストから読み取ります  ],});

    どのように機能するか

    1. 使用状況分析(buildStart)

    buildStart 中に、intlayerOptimize プラグイン(intlayer() の一部でもあります)は build.filesList にリストされているすべてのコンポーネントソースファイルをスキャンします。useIntlayer('key') または getIntlayer('key') の各呼び出しについて、どのフィールドがアクセスされているかを正確に記録します。例えば:

    ts
    const { title, description } = useIntlayer("myDict");// 記録: myDict → { title, description }

    これにより、transform 呼び出しが実行される前に pruneContext.fieldUsageMap が構築されます。

    2. JSON pruning (transform, enforce: 'pre')

    Viteがコンパイル済みの辞書JSONファイルを処理する場合、intlayerPruneはViteの組み込みJSON → ESM変換の前に処理を行います。pruneContextからfield-usageマップを読み取り、記録された使用セットに含まれていないすべてのcontentフィールドを削除します。

    2つのコンテンツ形状がサポートされています:

    • Static dictionaries{ nodeType: "translation", translation: { en: {...}, fr: {...} } }。フィールドはtranslation内のロケールごとに削除されます。
    • Dynamic (per-locale) dictionaries{ fieldA: ..., fieldB: ... }のようなflat構造。フィールドはトップレベルで削除されます。

    3. エッジケース

    辞書のコンテンツ構造が認識できない場合(例:異常にネストされた形状)、pruneContext.dictionariesWithEdgeCases に追加され、そのままにされます。警告がログに出力されます。intlayerMinify もこれらの辞書をスキップします。

    4. Field-rename map

    Pruning が成功すると、intlayerPrunepruneContext.dictionaryKeyToFieldRenameMap も書き込みます。これは元のフィールド名から短いエイリアスへのマッピングです。intlayerMinify はこのマップを読み込んで出力 JSON 内のフィールドの名前を変更し、intlayerOptimize の Babel rename pass はソースファイル内のプロパティアクセスをそれに応じて更新します。

    アクティベーション条件

    intlayerPrune は以下のすべてが当てはまる場合のみアクティブになります:

    1. Vite コマンドが build である。
    2. build.optimizetrue である (または undefined で、ビルドではデフォルトで true)。
    3. Intlayer の設定で build.purgetrue である。

    editor.enabledtrue の場合、エディターが完全な辞書コンテンツを必要とするため、自動的に無効化されます。