Compiler

Rust-basiertes SWC-Plugin für gt-next.

Compiler

gt-next enthält ein Rust-basiertes SWC-Plugin, das zur Build-Zeit Analysen durchführt, um häufige Übersetzungsfehler zu erkennen und die Leistung zu optimieren.

Funktionen

Erkennung dynamischer Inhalte

Erkennt nicht eingebettete dynamische Inhalte in Übersetzungskomponenten:

// ❌ Ungültig - dynamischer Inhalt nicht umschlossen
<T>Hallo {userName}</T>

// ✅ Gültig - dynamischer Inhalt in Variable-Komponente umschlossen  
<T>Hallo <Var>{userName}</Var></T>

Validierung von Funktionsaufrufen

Erkennt nicht-literal übergebene Argumente in Übersetzungsfunktionen:

const t = useGT();

// ❌ Ungültig - Template-Literale und Verkettung
t(`Hello ${name}`)
t("Hello " + name)

// ✅ Gültig - String-Literale mit Variablensubstitution
t("Hello, {name}!", { name })

Hash-Generierung zur Compile-Zeit

Berechnet Übersetzungs-Hashes im Voraus für bessere Laufzeitleistung:

// Eingabe
<T>Hello world</T>

// Ausgabe (wenn aktiviert)
<T _hash="a1b2c3d4">Hello world</T>

Konfiguration

Konfiguriere das SWC‑Plugin in deiner next.config.js:

import { withGTConfig } from 'gt-next/config';

export default withGTConfig(nextConfig, {
  locales: ['en', 'es'],
  swcPluginOptions: {
    logLevel: 'silent',     // Warnungsausgabe steuern
    compileTimeHash: false, // Hash-Generierung aktivieren
  },
});

Optionen

  • logLevel: Steuert die Ausgabestufe für Warnungen

    • 'silent' - Keine Warnungen (Standard in Produktion)
    • 'error' - Als Build-Fehler anzeigen
    • 'warn' - Als Warnungen anzeigen (Standard in der Entwicklung)
    • 'info' - Informationsmeldungen anzeigen
    • 'debug' - Alle Debug-Informationen anzeigen
  • compileTimeHash: Aktiviert die Generierung von Compile-Time-Hashes

    • false - Deaktiviert (Standard)
    • true - Generiert Hashes zur Build-Zeit für bessere Performance

Einschränkungen

Das SWC‑Plugin verarbeitet files einzeln und kann Verstöße in reexportierten Komponenten nicht erkennen:

// Datei A: export { T as Translate } from 'gt-next'
// Datei B: import { Translate } from './A'
<Translate>Hello {name}</Translate> // Wird nicht erkannt

Wie ist diese Anleitung?