编译器
gt-next 的 Rust 编写的 SWC 插件。
编译器
gt-next 内置一个基于 Rust 的 SWC 插件,可在构建阶段进行分析,以捕捉常见的翻译错误并优化性能。
功能
动态内容检测
检测翻译组件中未包裹的动态内容:
// ❌ 无效 - 动态内容未包裹
<T>Hello {userName}</T>
// ✅ 有效 - 动态内容使用变量组件包裹
<T>Hello <Var>{userName}</Var></T>
函数调用校验
检测传递给翻译函数的非字面量参数:
const t = useGT();
// ❌ 无效 - 模板字面量与字符串拼接
t(`Hello ${name}`)
t("Hello " + name)
// ✅ 有效 - 使用变量占位替换的字符串字面量
t("Hello, {name}!", { name })
编译期哈希生成
预先计算翻译哈希以提升运行时性能:
// Input
<T>Hello world</T>
// Output(启用时)
<T _hash="a1b2c3d4">Hello world</T>
配置
在你的 next.config.js
中配置 SWC 插件:
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 插件按文件逐一处理,无法检测通过再导出的组件中的违规用法:
// File A: export { T as Translate } from 'gt-next'
// File B: import { Translate } from './A'
<Translate>Hello {name}</Translate> // 无法被检测到
若需涵盖包含再导出的完整场景,请考虑使用 gt-next 的 ESLint 插件。
这份指南怎么样?