作者:
    Creation:2026-06-25Last update:2026-06-25

    intlayerMinify

    intlayerMinify 是一个 Vite 插件,用于在生产环境构建(production build)期间压缩编译后的字典 JSON 文件。它会清除所有不必要的空格,并在与 intlayerPrune 结合时,可选地将内容字段名称重命名为简短的字母别名(a, b, c, …),以进一步减小包大小。

    当您使用 intlayer() 时,该插件已自动包含并配置。只有在您自己构建插件栈时,才需要手动注册它。

    用法

    ts
    // vite.config.ts
    import { defineConfig } from "vite";
    import { intlayerMinify, intlayerPrune } from "vite-intlayer";
    import { createPruneContext } from "@intlayer/babel";
    
    const pruneContext = createPruneContext();
    
    export default defineConfig({
      plugins: [
        intlayerPrune(intlayerConfig, pruneContext),
        intlayerMinify(intlayerConfig, pruneContext),
      ],
    });
    

    激活条件

    intlayerMinify 仅在以下三个条件均满足时处于活动状态:

    1. Vite 命令为 build(不是 serve / dev 开发服务)。
    2. build.optimizetrue(或 undefined,构建时默认为 true)。
    3. 您的 Intlayer 配置中 build.minifytrue

    editor.enabledtrue 时,插件仍会运行,但会跳过字段重命名:重命名会重写解释器遍历的内容键,这会导致可视化编辑器收到的 keyPath 不再与其正在编辑的未合并字典相匹配。空白压缩和顶层元数据清除仍保持启用。

    哪些内容会被压缩

    该插件针对两个字典位置(解析自 intlayer.system):

    • dictionariesDir — 静态全语言字典(例如 .intlayer/dictionaries/*.json
    • dynamicDictionariesDir — 每种语言的动态字典
    获取模式字典(fetchDictionariesDir从不会被压缩,因为它们在运行时使用其原始字段名称从远程 API 提供服务。重命名字段将导致服务器响应与客户端属性访问之间出现不匹配。

    字段名混淆(属性压缩)

    intlayerPrune 分析了代码库并填充了 pruneContext.dictionaryKeyToFieldRenameMap 时,intlayerMinify 也会将内容字段名称重命名为简短别名。例如:

    json
    // 混淆前
    { "key": "myDict", "content": { "title": "Hello", "description": "World" } }
    
    // 混淆后(进行混淆处理)
    { "key": "myDict", "content": { "a": "Hello", "b": "World" } }
    

    对应的源文件属性访问已由 intlayerOptimize 内的 Babel 处理重命名,因此运行时行为保持不变。

    内部 Intlayer 字段(nodeType, translation 等)绝不会被重命名。

    边缘情况字典

    pruneContext.dictionariesWithEdgeCases 中被标记的字典(在修剪(prune)阶段检测到结构异常)将被完全跳过 — 既不压缩也不混淆 — 以避免发布损坏的数据。

    限饰组(集合 / 变体 / 元记录)

    对于具有 qualifierTypes 数组的字典(集合、变体和元记录),插件会逐字保留 qualifierTypes 数组和 meta 侧图。仅混淆 content 条目的字段名称。用于运行时选择器匹配的复合键绝不会被修改。