Autor:
    Criação:2026-01-21Última atualização:2026-01-21

    Documentação do plugin intlayerPrune para Vite

    O plugin Vite intlayerPrune é usado para realizar tree-shaking e podar dicionários não utilizados do bundle da sua aplicação. Isso ajuda a reduzir o tamanho final do bundle incluindo apenas o conteúdo multilíngue necessário.

    Utilização

    Como parte de intlayer() (recomendado)

    Ative a poda através da sua configuração Intlayer e o plugin principal trata de tudo:

    ts
    // intlayer.config.tsimport { defineConfig } from "intlayer";export default defineConfig({  build: {    optimize: true, // ativa poda e minificação  },});
    ts
    // vite.config.tsimport { defineConfig } from "vite";import { intlayer } from "vite-intlayer";export default defineConfig({  plugins: [intlayer()],});

    Standalone

    Se você está compondo a pilha de plugins manualmente, intlayerPrune e intlayerMinify compartilham um objeto PruneContext que deve ser criado uma vez e passado para ambos:

    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), // opcional, lê do mesmo contexto  ],});

    Como funciona

    1. Análise de uso (buildStart)

    Durante buildStart, o plugin intlayerOptimize (também parte de intlayer()) verifica cada arquivo de código-fonte de componente listado em build.filesList. Para cada chamada useIntlayer('key') ou getIntlayer('key'), ele registra exatamente quais campos são acessados, por exemplo:

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

    Isso constrói pruneContext.fieldUsageMap antes de qualquer chamada transform ser executada.

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

    When Vite processes a compiled dictionary JSON file, intlayerPrune intercepts it before Vite's built-in JSON → ESM conversion. It reads the field-usage map from pruneContext and removes any content field that is not in the recorded usage set.

    Two content shapes are supported:

    • Static dictionaries{ nodeType: "translation", translation: { en: {...}, fr: {...} } }. Fields are pruned per-locale inside translation.
    • Dynamic (per-locale) dictionaries — flat { fieldA: ..., fieldB: ... }. Fields are pruned at the top level.

    3. Casos extremos

    Se a estrutura de conteúdo de um dicionário não puder ser reconhecida (por exemplo, uma forma aninhada incomum), ele será adicionado a pruneContext.dictionariesWithEdgeCases e deixado intocado. Um aviso é registrado. intlayerMinify também ignora esses dicionários.

    4. Mapa de renomeação de campos

    Quando a limpeza tem sucesso, intlayerPrune também escreve pruneContext.dictionaryKeyToFieldRenameMap — um mapeamento de nomes de campos originais para aliases curtos. intlayerMinify lê este mapa para renomear campos no JSON de saída, e a passagem de renomeação Babel de intlayerOptimize atualiza os acessos de propriedades nos arquivos fonte de acordo.

    Condições de ativação

    intlayerPrune está ativo apenas quando todas as seguintes condições são verdadeiras:

    1. O comando Vite é build.
    2. build.optimize é true (ou undefined, que assume como padrão true para builds).
    3. build.purge é true na sua configuração do Intlayer.

    É automaticamente desativado quando editor.enabled é true porque o editor precisa do conteúdo completo do dicionário.