Компилятор
Плагин 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> // Не будет обнаруженНасколько полезно это руководство?