Compiler
Plugin SWC di gt-next, basato su Rust.
Compiler
gt-next include un plugin SWC scritto in Rust che esegue un’analisi in fase di build per intercettare gli errori di traduzione più comuni e ottimizzare le prestazioni.
Caratteristiche
Rilevamento dei contenuti dinamici
Rileva i contenuti dinamici non racchiusi all'interno dei componenti di traduzione:
// ❌ Non valido: contenuto dinamico non racchiuso
<T>Ciao {userName}</T>
// ✅ Valido: contenuto dinamico racchiuso in un componente Variabile
<T>Ciao <Var>{userName}</Var></T>Convalida delle chiamate di funzione
Rileva argomenti non letterali passati alle funzioni di traduzione:
const t = useGT();
// ❌ Non valido: template literal e concatenazione
t(`Hello ${name}`)
t("Hello " + name)
// ✅ Valido: stringhe letterali con sostituzione di variabili
t("Hello, {name}!", { name })Generazione degli hash in fase di compilazione
Precalcola gli hash delle traduzioni per migliorare le prestazioni in fase di esecuzione:
/ Input
<T>Ciao, mondo</T>
// Output (quando abilitato)
<T _hash="a1b2c3d4">Ciao, mondo</T>Configurazione
Configura il plugin SWC nel file next.config.js:
import { withGTConfig } from 'gt-next/config';
export default withGTConfig(nextConfig, {
locales: ['en', 'es'],
swcPluginOptions: {
logLevel: 'silent', // Controlla l'output degli avvisi
compileTimeHash: false, // Abilita la generazione dell’hash
},
});Opzioni
-
logLevel: Controlla il livello di segnalazione'silent'- Nessun avviso (predefinito in produzione)'error'- Mostra come errori di build'warn'- Mostra come avvisi (predefinito in sviluppo)'info'- Mostra messaggi informativi'debug'- Mostra tutte le informazioni di debug
-
compileTimeHash: Abilita la generazione dell’hash in fase di compilazionefalse- Disattivato (predefinito)true- Genera hash in fase di build per prestazioni migliori
Limitazioni
Il plugin SWC elabora i file singolarmente e non è in grado di rilevare violazioni nei componenti riesportati:
// File A: export { T as Translate } from 'gt-next'
// File B: import { Translate } from './A'
<Translate>Ciao {name}</Translate> // Non sarà rilevatoCome valuti questa guida?