Oxlint 把 React Compiler 的 lint 和 transform 全接进了 Rust——这件事把 Vite 项目的账彻底变了
React 项目配了几年,每次跑 React Compiler 都要接受 Babel 那套「转换一次等半天」的代价——这件事今天被 Oxc 的一个更新彻底变了。
8 月 20 日,Oxc 官方博客宣布 Oxlint 和 oxc-transform-react 正式支持 React Compiler。这意味着你在 Vite 8 项目里,可以直接用纯 Rust 跑 React Compiler 的 lint 检查和自动记忆化优化,而不再需要绑着 Babel 那套 JavaScript 工具链。
先说数字,这才是最有感的部分。Oxc 团队测出来的基准:原来 Babel-plugin-react-compiler 需要 100ms 的文件,用 oxc-transform-react 只需要 10ms 左右,整整快了 10 倍。更激进的是二进制体积——之前单独维护一个 React Compiler 的 Rust 分支需要 8.66MiB,现在直接把它的实现合并进 Oxc 的 AST,二进制缩小到了 3.97MiB,少了 55%。
怎么做到的?之前 React Compiler 的 Rust 实现和 Babel 的 AST 格式是绑定的,每次转换都要多走一步「先转 Babel AST 再处理」的流程,还要过一次 JSON 的来回。用 Oxc 自己的 AST 重写之后,这一步直接省了。
22 条 rules,已经在 Oxlint 里了。这 22 条规则对应上游 ESLint 推荐的 React 规则集,覆盖不可变性、纯度、render 中 setState 违规这些场景。只要在 Oxlint 配置里开 react 插件,把 correctness 类别设为 error:
{
"plugins": ["react"],
"categories": {
"correctness": "error"
}
}
之前 nursery 阶段的那个 react/react-compiler 规则可以直接删掉,换成这 22 条细分的规则。
怎么接到你的项目里。@vitejs/plugin-react v6.1.0 已经支持了这个功能,要求 Vite 8。在项目里装上这个版本和 oxc-transform-react,然后在 vite.config.ts 里开 compiler 选项:
import react from "@vitejs/plugin-react"
export default {
plugins: [
react({ compiler: true }),
],
}
这个集成放在 @vitejs/plugin-react 而不是 Vite 本身或者 Rolldown 核心里,为的是保持工具链的中立性——Rolldown、Vite、Next.js 都能接。
为什么说这件事值得注意。React Compiler 本身是个好功能,它帮你自动插 memo/useMemo/useCallback,省去手动优化的大部分工作。但之前用 Babel 跑,编译时间对大项目来说是个坎。现在 Oxc 把这条路打通了,React 项目的构建终于不用在「开 React Compiler 很慢」和「关掉省时间」之间做选择题。
下一步:如果你的项目在用 Vite 8,可以先在一个分支上试,把 @vitejs/plugin-react 升到 6.1.0,确认 22 条 rules 没有误报,然后逐步把 Babel 那套替换方案撤掉。具体迁移命令可以跑 npx oxlint --migrate react-compiler,Oxlint 会帮你把配置翻译过去。
评论区
登录后可评论。