Компилятор

Плагин SWC на Rust для gt-next.

Компилятор

gt-next включает плагин SWC на Rust, который выполняет анализ на этапе сборки, чтобы выявлять распространённые ошибки перевода и оптимизировать производительность.

Возможности

Обнаружение динамического контента

Обнаруживает неразмеченный динамический контент в компонентах перевода:

// ❌ Неверно - динамическое содержимое не обёрнуто
<T>Hello {userName}</T>

// ✅ Верно - динамическое содержимое обёрнуто в компонент переменной  
<T>Hello <Var>{userName}</Var></T>

Валидация вызовов функций

Обнаруживает нелитеральные аргументы, переданные в функции перевода:

const t = useGT();

// ❌ Недопустимо - шаблонные литералы и конкатенация
t(`Hello ${name}`)
t("Hello " + name)

// ✅ Допустимо - строковые литералы с подстановкой переменных
t("Привет, {name}!", { name })

Генерация хешей на этапе компиляции

Предварительный расчет хешей переводов для повышения производительности во время выполнения:

// Входные данные
<T>Hello world</T>

// Результат (при включении)
<T _hash="a1b2c3d4">Hello world</T>

Конфигурация

Сконфигурируйте плагин SWC в файле next.config.js:

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

export default withGTConfig(nextConfig, {
  locales: ['en', 'es'],
  swcPluginOptions: {
    logLevel: 'silent',     // Управление выводом предупреждений
    compileTimeHash: false, // Включить генерацию хеша
  },
});

Параметры

  • logLevel: Определяет уровень вывода предупреждений

    • 'silent' — без предупреждений (по умолчанию для продакшена)
    • 'error' — отображать как ошибки сборки
    • 'warn' — отображать как предупреждения (по умолчанию для разработки)
    • 'info' — отображать информационные сообщения
    • 'debug' — отображать всю отладочную информацию
  • compileTimeHash: Включает генерацию хэша на этапе компиляции

    • false — отключено (по умолчанию)
    • true — генерировать хэши на этапе сборки для повышения производительности

Ограничения

Плагин SWC обрабатывает файлы по отдельности и не может обнаруживать нарушения в переэкспортируемых компонентах:

// Файл A: export { T as Translate } from 'gt-next'
// Файл B: import { Translate } from './A'
<Translate>Hello {name}</Translate> // Не будет обнаружен

Насколько полезно это руководство?

Компилятор