StartseiteSandboxShowcaseAppDokumentBlog
    • EnglishEnglisch
      EN
    • русскийRussisch
      RU
    • 日本語Japanisch
      JA
    • françaisFranzösisch
      FR
    • 한국어Koreanisch
      KO
    • 中文Chinesisch
      ZH
    • españolSpanisch
      ES
    • DeutschDeutsch
      DE
    • العربيةArabisch
      AR
    • italianoItalienisch
      IT
    • British EnglishEnglisch (Vereinigtes Königreich)
      EN-GB
    • portuguêsPortugiesisch
      PT
    • हिन्दीHindi
      HI
    • TürkçeTürkisch
      TR
    • polskiPolnisch
      PL
    • IndonesiaIndonesisch
      ID
    • Tiếng ViệtVietnamesisch
      VI
    • українськаUkrainisch
      UK
    /
    Dokumentation nach Framework filtern
    Alt+←
    Warum Intlayer?
    Anfangen
    Konzept
    • Wie Intlayer funktioniert
    • Konfiguration
    • TestFillBuildWatchExtractLoginPushPullConfigurationListVersionEditorLiveDebugDoc ReviewDoc TranslateSDK
    • Visueller Editor
    • CMS
    • CI/CD-Integration
    • ÜbersetzungPluralAufzählungBedingungGeschlechtEinfügungDateiVerschachtelungMarkdownHTMLFunktionsabruf
    • Datei pro Locale
    • Compiler
    • Automatisches Ausfüllen
    • Testen
    • Bundle-Optimierung
    Umwelt
    • Next.js 14 und App Router
      Next.js 15
      Next.js ohne Locale URL
      Next.js und Page Router
      Compiler
    • Tanstack Start Solid
    • Astro und React
      Astro und Svelte
      Astro und Vue
      Astro und Solid
      Astro und Preact
      Astro und Lit
      Astro und Vanilla JS
    • React Router v7
      React Router v7 (fs-routes)
      Compiler
    • Nuxt und Vue
    • Vite und Solid
    • SvelteKit
    • Vite und Preact
    • Vite und Vanilla JS
    • Vite und Lit
    • Angular 19 (Webpack)
      Analog
    • React CRA
    • React Native und Expo
    • Express.js
      NestJS
      Fastify
      Hono
      Adonis
    • Lynx und React
    Plugins
    • JSON
    • gettext (.po)
    VS Code-Erweiterung
    Agent
    • MCP-Server
    • Agenten-Fähigkeiten
    Versionen
    • v8
    • v7
    • v6
    Benchmark
    • Next.js
    • TanStack
    • Vue
    • Solid
    • Svelte
    Blog
    Frage stellen
    1. Documentation
    2. Konzept
    3. Bundle optimization
    Erstellung:2025-11-25Letzte Aktualisierung:2026-04-08
    Referenzieren Sie diese Dokumentation mit Ihrem bevorzugten AI-Assistenten
    ChatGPT
    Claude
    DeepSeek
    Google AI mode
    Gemini
    Perplexity
    Mistral
    Grok

    Stellen Sie Ihre Frage und erhalten Sie einen Resümee des Dokuments, indem Sie diese Seite und den AI-Anbieter Ihrer Wahl referenzieren

    Versionshistorie

    1. "Optionen `minify` und `purge` zur Build-Konfiguration hinzugefügt"
      v8.7.08.4.2026

    Der Inhalt dieser Seite wurde mit einer KI übersetzt.

    Den englischen Originaltext ansehen
    Diese Dokumentation bearbeiten

    Wenn Sie eine Idee haben, um diese Dokumentation zu verbessern, zögern Sie bitte nicht, durch das Einreichen eines Pull-Requests auf GitHub beizutragen.

    GitHub-Link zur Dokumentation
    Kopieren

    Markdown des Dokuments in die Zwischenablage kopieren

    Optimierung der i18n-Bundle-Größe und Leistung

    Eine der häufigsten Herausforderungen bei traditionellen i18n-Lösungen, die auf JSON-Dateien basieren, ist die Verwaltung der Inhaltsgröße. Wenn Entwickler Inhalte nicht manuell in Namensräume trennen, laden Benutzer oft Übersetzungen für jede Seite und potenziell jede Sprache herunter, nur um eine einzige Seite anzuzeigen.

    Beispielsweise könnte eine Anwendung mit 10 Seiten, die in 10 Sprachen übersetzt wurden, dazu führen, dass ein Benutzer den Inhalt von 100 Seiten herunterlädt, obwohl er nur eine benötigt (die aktuelle Seite in der aktuellen Sprache). Dies führt zu verschwendeter Bandbreite und langsameren Ladezeiten.

    Intlayer löst dieses Problem durch Optimierung zur Build-Zeit. Es analysiert Ihren Code, um festzustellen, welche Wörterbücher tatsächlich pro Komponente verwendet werden, und fügt nur den erforderlichen Inhalt in Ihr Bundle ein.

    Inhaltsverzeichnis

    Bundle scannen

    Die Analyse Ihres Bundles ist der erste Schritt zur Identifizierung „schwerer“ JSON-Dateien und Möglichkeiten zum Code-Splitting. Diese Tools generieren eine visuelle Treemap des kompilierten Codes Ihrer Anwendung, sodass Sie genau sehen können, welche Bibliotheken den meisten Platz verbrauchen.

    Vite / Rollup

    Vite verwendet Rollup unter der Haube. Das Plugin rollup-plugin-visualizer generiert eine interaktive HTML-Datei, die die Größe jedes Moduls in Ihrem Graphen anzeigt.

    bash
    Code kopieren

    Kopieren Sie den Code in die Zwischenablage

    npm install -D rollup-plugin-visualizer
    vite.config.ts
    Code kopieren

    Kopieren Sie den Code in die Zwischenablage

    import { defineConfig } from "vite";import { visualizer } from "rollup-plugin-visualizer";export default defineConfig({ plugins: [   visualizer({     open: true, // Bericht automatisch im Browser öffnen     filename: "stats.html",     gzipSize: true,     brotliSize: true,   }), ],});

    Next.js (Turbopack)

    Für Projekte, die den App Router und Turbopack verwenden, bietet Next.js einen integrierten experimentellen Analyzer, der keine zusätzlichen Abhängigkeiten erfordert.

    bash
    Code kopieren

    Kopieren Sie den Code in die Zwischenablage

    npx next experimental-analyze

    Next.js (Webpack)

    Wenn Sie den Standard-Webpack-Bundler in Next.js verwenden, nutzen Sie den offiziellen Bundle-Analyzer. Aktivieren Sie ihn, indem Sie während des Builds eine Umgebungsvariable setzen.

    bash
    Code kopieren

    Kopieren Sie den Code in die Zwischenablage

    npm install -D @next/bundle-analyzer
    next.config.js
    Code kopieren

    Kopieren Sie den Code in die Zwischenablage

    const withBundleAnalyzer = require("@next/bundle-analyzer")({ enabled: process.env.ANALYZE === "true",});module.exports = withBundleAnalyzer({ // Ihre Next.js-Konfiguration});

    Verwendung:

    bash
    Code kopieren

    Kopieren Sie den Code in die Zwischenablage

    ANALYZE=true npm run build

    Standard Webpack

    Für Create React App (ejected), Angular oder benutzerdefinierte Webpack-Setups verwenden Sie den Branchenstandard webpack-bundle-analyzer.

    bash
    Code kopieren

    Kopieren Sie den Code in die Zwischenablage

    npm install -D webpack-bundle-analyzer
    Code kopieren

    Kopieren Sie den Code in die Zwischenablage

    import { BundleAnalyzerPlugin } from "webpack-bundle-analyzer";export default { plugins: [   new BundleAnalyzerPlugin({     analyzerMode: "static",     reportFilename: "bundle-analyzer.html",     openAnalyzer: false,   }), ],};

    Funktionsweise

    Intlayer verwendet einen Ansatz pro Komponente. Im Gegensatz zu globalen JSON-Dateien wird Ihr Inhalt neben oder innerhalb Ihrer Komponenten definiert. Während des Build-Prozesses führt Intlayer folgende Schritte aus:

    1. Analysiert Ihren Code, um useIntlayer-Aufrufe zu finden.
    2. Erstellt den entsprechenden Wörterbuchinhalt.
    3. Ersetzt den useIntlayer-Aufruf durch optimierten Code basierend auf Ihrer Konfiguration.

    Dies stellt sicher, dass:

    • Wenn eine Komponente nicht importiert wird, ihr Inhalt nicht im Bundle enthalten ist (Dead Code Elimination).
    • Wenn eine Komponente per Lazy Loading geladen wird, ihr Inhalt ebenfalls per Lazy Loading geladen wird.

    Einrichtung nach Plattform

    Next.js

    Next.js benötigt das @intlayer/swc-Plugin, um die Transformation zu handhaben, da Next.js SWC für Builds verwendet.

    Dieses Plugin ist standardmäßig nicht installiert, da SWC-Plugins für Next.js noch experimentell sind. Dies kann sich in Zukunft ändern.
    bash
    Code kopieren

    Kopieren Sie den Code in die Zwischenablage

    npm install -D @intlayer/swc

    Nach der Installation erkennt und verwendet Intlayer das Plugin automatisch.

    Vite

    Vite verwendet das @intlayer/babel-Plugin, das als Abhängigkeit von vite-intlayer enthalten ist. Die Optimierung ist standardmäßig aktiviert. Es ist nichts weiter zu tun.

    Webpack

    Um die Bundle-Optimierung mit Intlayer in Webpack zu aktivieren, müssen Sie das entsprechende Babel- (@intlayer/babel) oder SWC- (@intlayer/swc) Plugin installieren und konfigurieren.

    bash
    Code kopieren

    Kopieren Sie den Code in die Zwischenablage

    npm install -D @intlayer/babel
    babel.config.js
    Code kopieren

    Kopieren Sie den Code in die Zwischenablage

    const { getOptimizePluginOptions, intlayerOptimizeBabelPlugin,} = require("@intlayer/babel");module.exports = { plugins: [[intlayerOptimizeBabelPlugin, getOptimizePluginOptions()]],};

    Konfiguration

    Sie können steuern, wie Intlayer Ihr Bundle optimiert, indem Sie die Eigenschaft build in Ihrer intlayer.config.ts verwenden.

    intlayer.config.ts
    Code kopieren

    Kopieren Sie den Code in die Zwischenablage

    import { Locales, type IntlayerConfig } from "intlayer";const config: IntlayerConfig = {  internationalization: {    locales: [Locales.ENGLISH, Locales.FRENCH],    defaultLocale: Locales.ENGLISH,  },  dictionary: {    importMode: "dynamic",  },  build: {    /**     * Wörterbücher minimieren, um die Bundle-Größe zu reduzieren.     */     minify: true;    /**     * Nicht verwendete Schlüssel in Wörterbüchern entfernen (Purge)     */     purge: true;    /**     * Gibt an, ob beim Build TypeScript-Typen geprüft werden sollen     */    checkTypes: false;  },};export default config;
    In den meisten Fällen wird empfohlen, die Standardoption für optimize beizubehalten.
    Weitere Details finden Sie in der Konfigurationsdokumentation: Konfiguration

    Build-Optionen

    Folgende Optionen sind im build-Konfigurationsobjekt verfügbar:

    Alle Tabellendaten anzeigen

    Tabelle in einem Modal öffnen, um alle Daten übersichtlich anzuzeigen

    Eigenschaft Typ Standard Beschreibung
    optimize boolean undefined Steuert, ob die Build-Optimierung aktiviert ist. Wenn true, ersetzt Intlayer Wörterbuchaufrufe durch optimierte Injektionen. Wenn false, ist die Optimierung deaktiviert. Im Idealfall in der Produktion auf true setzen.
    minify boolean false Ob die Wörterbücher minimiert werden sollen, um die Bundle-Größe zu reduzieren.
    purge boolean false Ob nicht verwendete Schlüssel in Wörterbüchern entfernt werden sollen.

    Minimierung

    Die Minimierung von Wörterbüchern entfernt unnötige Leerzeichen, Kommentare und reduziert die Größe des JSON-Inhalts. Dies ist besonders nützlich für große Wörterbücher.

    intlayer.config.ts
    Code kopieren

    Kopieren Sie den Code in die Zwischenablage

    import type { IntlayerConfig } from "intlayer";const config: IntlayerConfig = {  build: {    minify: true,  },};export default config;
    Hinweis: Die Minimierung wird ignoriert, wenn optimize deaktiviert ist oder wenn der Visual Editor aktiviert ist (da der Editor den vollständigen Inhalt benötigt, um Bearbeitungen zu ermöglichen).

    Purging (Bereinigung)

    Purging stellt sicher, dass nur die tatsächlich in Ihrem Code verwendeten Schlüssel im finalen Wörterbuch-Bundle enthalten sind. Dies kann die Größe Ihres Bundles erheblich reduzieren, wenn Sie große Wörterbücher mit vielen Schlüsseln haben, die nicht in jedem Teil Ihrer Anwendung verwendet werden.

    intlayer.config.ts
    Code kopieren

    Kopieren Sie den Code in die Zwischenablage

    import type { IntlayerConfig } from "intlayer";const config: IntlayerConfig = {  build: {    purge: true,  },};export default config;
    Hinweis: Purging wird ignoriert, wenn optimize deaktiviert ist.

    Import-Modus

    Für große Anwendungen, die mehrere Seiten und Sprachen umfassen, können Ihre JSON-Dateien einen erheblichen Teil Ihrer Bundle-Größe ausmachen. Intlayer ermöglicht es Ihnen zu steuern, wie Wörterbücher geladen werden.

    Der Import-Modus kann standardmäßig global in Ihrer intlayer.config.ts-Datei definiert werden.

    intlayer.config.ts
    Code kopieren

    Kopieren Sie den Code in die Zwischenablage

    import type { IntlayerConfig } from "intlayer";const config: IntlayerConfig = {  build: {    minify: true,  },};export default config;

    Ebenso wie für jedes Wörterbuch in Ihren .content.{{ts|tsx|js|jsx|mjs|cjs|json|jsonc|json5}}-Dateien.

    ts
    Code kopieren

    Kopieren Sie den Code in die Zwischenablage

    import { type Dictionary, t } from "intlayer";const appContent: Dictionary = {  key: "app",  importMode: "dynamic", // Standard-Importmodus überschreiben  content: {    // ...  },};export default appContent;
    Alle Tabellendaten anzeigen

    Tabelle in einem Modal öffnen, um alle Daten übersichtlich anzuzeigen

    Eigenschaft Typ Standard Beschreibung
    importMode 'static', 'dynamic', 'fetch' 'static' Veraltet: Verwenden Sie stattdessen dictionary.importMode. Bestimmt, wie Wörterbücher geladen werden (siehe Details unten).

    Die Einstellung importMode legt fest, wie der Wörterbuchinhalt in Ihre Komponente eingefügt wird. Sie können dies global in der Datei intlayer.config.ts unter dem Objekt dictionary definieren oder für ein bestimmtes Wörterbuch in dessen .content.ts-Datei überschreiben.

    1. Statischer Modus (default)

    Im statischen Modus ersetzt Intlayer useIntlayer durch useDictionary und fügt das Wörterbuch direkt in das JavaScript-Bundle ein.

    • Vorteile: Sofortiges Rendering (synchron), keine zusätzlichen Netzwerkanfragen während der Hydrierung.
    • Nachteile: Das Bundle enthält Übersetzungen für alle verfügbaren Sprachen für diese spezifische Komponente.
    • Ideal für: Single Page Applications (SPA).

    Beispiel für transformierten Code:

    tsx
    Code kopieren

    Kopieren Sie den Code in die Zwischenablage

    // Ihr Codeconst content = useIntlayer("my-key");// Optimierter Code (Statisch)const content = useDictionary({  key: "my-key",  content: {    nodeType: "translation",    translation: {      en: "My title",      fr: "Mon titre",    },  },});

    2. Dynamischer Modus

    Im dynamischen Modus ersetzt Intlayer useIntlayer durch useDictionaryAsync. Dies verwendet import() (ähnlich wie Suspense), um speziell das JSON für die aktuelle Sprache nachzuladen (Lazy Loading).

    • Vorteile: Tree Shaking auf Sprach-Ebene. Ein Benutzer, der die englische Version ansieht, lädt nur das englische Wörterbuch herunter. Das französische Wörterbuch wird nie geladen.
    • Nachteile: Löst pro Komponente während der Hydrierung eine Netzwerkanfrage (Asset-Abruf) aus.
    • Ideal für: Große Textblöcke, Artikel oder Anwendungen, die viele Sprachen unterstützen, bei denen die Bundle-Größe kritisch ist.

    Beispiel für transformierten Code:

    tsx
    Code kopieren

    Kopieren Sie den Code in die Zwischenablage

    // Ihr Codeconst content = useIntlayer("my-key");// Optimierter Code (Dynamisch)const content = useDictionaryAsync({  en: () =>    import(".intlayer/dynamic_dictionary/my-key/en.json").then(      (mod) => mod.default    ),  fr: () =>    import(".intlayer/dynamic_dictionary/my-key/fr.json").then(      (mod) => mod.default    ),});
    Wenn Sie importMode: 'dynamic' verwenden und 100 Komponenten useIntlayer auf einer einzigen Seite nutzen, wird der Browser versuchen, 100 separate Abrufe durchzuführen. Um diesen „Wasserfall“ an Anfragen zu vermeiden, gruppieren Sie Inhalte in weniger .content-Dateien (z. B. ein Wörterbuch pro Seitenabschnitt) statt einer Datei pro Atom-Komponente.

    3. Fetch-Modus

    Verhält sich ähnlich wie der dynamische Modus, versucht jedoch zuerst, Wörterbücher von der Intlayer Live Sync API abzurufen. Wenn der API-Aufruf fehlschlägt oder der Inhalt nicht für Live-Updates markiert ist, erfolgt ein Fallback auf den dynamischen Import.

    Weitere Details finden Sie in der CMS-Dokumentation: CMS
    Im Fetch-Modus können Purge und Minimierung nicht verwendet werden.

    Zusammenfassung: Statisch vs. Dynamisch

    Alle Tabellendaten anzeigen

    Tabelle in einem Modal öffnen, um alle Daten übersichtlich anzuzeigen

    Merkmal Statischer Modus Dynamischer Modus
    JS-Bundle-Größe Größer (enthält alle Sprachen für die Komponente) Kleiner (nur Code, kein Inhalt)
    Initiales Laden Sofort (Inhalt ist im Bundle) Leichte Verzögerung (lädt JSON)
    Netzwerkanfragen 0 zusätzliche Anfragen 1 Anfrage pro Wörterbuch
    Tree Shaking Komponentenebene Komponentenebene + Sprach-Ebene
    Bester Anwendungsfall UI-Komponenten, kleine Anwendungen Seiten mit viel Text, viele Sprachen
    Testen
    Next.js
    Alt+→

    Auf dieser Seite

      Diskussionen sind anonym und werden regelmäßig überprüft, um häufige Probleme zu behandeln. Teilen Sie gerne Feature-Ideen, Feedback zur Dokumentation oder alles rund um Intlayer, wir nutzen diese Eingaben, um unsere Roadmap zu gestalten und das Produkt zu verbessern.

      npm install -D rollup-plugin-visualizer
      import { defineConfig } from "vite";import { visualizer } from "rollup-plugin-visualizer";export default defineConfig({ plugins: [   visualizer({     open: true, // Bericht automatisch im Browser öffnen     filename: "stats.html",     gzipSize: true,     brotliSize: true,   }), ],});
      npx next experimental-analyze
      npm install -D @next/bundle-analyzer
      const withBundleAnalyzer = require("@next/bundle-analyzer")({ enabled: process.env.ANALYZE === "true",});module.exports = withBundleAnalyzer({ // Ihre Next.js-Konfiguration});
      ANALYZE=true npm run build
      npm install -D webpack-bundle-analyzer
      import { BundleAnalyzerPlugin } from "webpack-bundle-analyzer";export default { plugins: [   new BundleAnalyzerPlugin({     analyzerMode: "static",     reportFilename: "bundle-analyzer.html",     openAnalyzer: false,   }), ],};
      npm install -D @intlayer/swc
      npm install -D @intlayer/babel
      const { getOptimizePluginOptions, intlayerOptimizeBabelPlugin,} = require("@intlayer/babel");module.exports = { plugins: [[intlayerOptimizeBabelPlugin, getOptimizePluginOptions()]],};
      import { Locales, type IntlayerConfig } from "intlayer";const config: IntlayerConfig = {  internationalization: {    locales: [Locales.ENGLISH, Locales.FRENCH],    defaultLocale: Locales.ENGLISH,  },  dictionary: {    importMode: "dynamic",  },  build: {    /**     * Wörterbücher minimieren, um die Bundle-Größe zu reduzieren.     */     minify: true;    /**     * Nicht verwendete Schlüssel in Wörterbüchern entfernen (Purge)     */     purge: true;    /**     * Gibt an, ob beim Build TypeScript-Typen geprüft werden sollen     */    checkTypes: false;  },};export default config;
      import type { IntlayerConfig } from "intlayer";const config: IntlayerConfig = {  build: {    minify: true,  },};export default config;
      import type { IntlayerConfig } from "intlayer";const config: IntlayerConfig = {  build: {    purge: true,  },};export default config;
      import type { IntlayerConfig } from "intlayer";const config: IntlayerConfig = {  build: {    minify: true,  },};export default config;
      import { type Dictionary, t } from "intlayer";const appContent: Dictionary = {  key: "app",  importMode: "dynamic", // Standard-Importmodus überschreiben  content: {    // ...  },};export default appContent;
      // Ihr Codeconst content = useIntlayer("my-key");// Optimierter Code (Statisch)const content = useDictionary({  key: "my-key",  content: {    nodeType: "translation",    translation: {      en: "My title",      fr: "Mon titre",    },  },});
      // Ihr Codeconst content = useIntlayer("my-key");// Optimierter Code (Dynamisch)const content = useDictionaryAsync({  en: () =>    import(".intlayer/dynamic_dictionary/my-key/en.json").then(      (mod) => mod.default    ),  fr: () =>    import(".intlayer/dynamic_dictionary/my-key/fr.json").then(      (mod) => mod.default    ),});