このページとあなたの好きなAIアシスタントを使ってドキュメントを要約します
このページのコンテンツはAIを使用して翻訳されました。
英語の元のコンテンツの最新バージョンを見るIf you have an idea for improving this documentation, please feel free to contribute by submitting a pull request on GitHub.
GitHub link to the documentationCopy doc Markdown to clipboard
intlayerPrune Vite プラグイン ドキュメント
intlayerPrune Vite プラグインは、アプリケーションのバンドルから未使用の辞書をツリーシェイクおよびプルーニングするために使用します。これにより、必要な多言語コンテンツのみを含めることで、最終的なバンドルサイズを削減できます。
使用法
intlayer() の一部として(推奨)
Intlayer の設定を通じてプルーニングを有効にすると、メインプラグインがすべてを処理します:
コードをクリップボードにコピー
// intlayer.config.tsimport { defineConfig } from "intlayer";export default defineConfig({ build: { optimize: true, // プルーニングと縮小化の両方を有効にします },});コードをクリップボードにコピー
// vite.config.tsimport { defineConfig } from "vite";import { intlayer } from "vite-intlayer";export default defineConfig({ plugins: [intlayer()],});スタンドアロン
プラグインスタックを手動で構成している場合、intlayerPrune と intlayerMinify は PruneContext オブジェクトを共有します。このオブジェクトは一度作成して、両方に渡す必要があります:
コードをクリップボードにコピー
// 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') の各呼び出しについて、どのフィールドがアクセスされているかを正確に記録します。例えば:
コードをクリップボードにコピー
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 が成功すると、intlayerPrune は pruneContext.dictionaryKeyToFieldRenameMap も書き込みます。これは元のフィールド名から短いエイリアスへのマッピングです。intlayerMinify はこのマップを読み込んで出力 JSON 内のフィールドの名前を変更し、intlayerOptimize の Babel rename pass はソースファイル内のプロパティアクセスをそれに応じて更新します。
アクティベーション条件
intlayerPrune は以下のすべてが当てはまる場合のみアクティブになります:
- Vite コマンドが
buildである。 build.optimizeがtrueである (またはundefinedで、ビルドではデフォルトでtrue)。- Intlayer の設定で
build.purgeがtrueである。
editor.enabled が true の場合、エディターが完全な辞書コンテンツを必要とするため、自動的に無効化されます。