配了三年 React,每次等编译等得想把电脑砸了——今天 Vite 用一行配置把 Babel 彻底送走了
配了三年 React,每次等编译等得想把电脑砸了——今天 Vite 用一行配置把 Babel 彻底送走了
React Compiler 面世两年,一直有个硬伤:它必须跑在 Babel 之上。这意味着每个 React 项目都要多背一个 Babel 编译管道,build 时间平白多出 10-14 秒,更别提 lint 和 build 用的是不同版本的 React Compiler,规则覆盖不一致,有些组件在 lint 时没报错,但 build 时编译器悄悄跳过了它——这种坑最要命。
2026 年 8 月,局面彻底变了。
这次真的不用 Babel 了
React 团队把 React Compiler 移植到了 Rust。oxc 项目承接了这次移植并进一步优化,直接把 Rust 版本嵌进了自己的 AST 管道。2026 年 8 月 4 日,oxc 发布了 oxc-transform-react v0.0.1,官方定位是”Native Node.js bindings for Oxc‘s experimental Rust port of React Compiler”。
更关键的是:配合 @vitejs/plugin-react v6.1.0,现在只需要一行配置:
// vite.config.js
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
export default defineConfig({
plugins: [react({ compiler: true })],
});
Babel 整套东西全部卸掉:@rolldown/plugin-babel、babel-plugin-react-compiler、@babel/preset-typescript,一个不留。
React Router 框架模式的用户有另一个包 @acusti/vite-plugin-react-compiler,效果完全一样:
// vite.config.js(React Router 框架模式)
import reactCompiler from '@acusti/vite-plugin-react-compiler';
import { reactRouter } from '@react-router/dev/vite';
export default defineConfig({
plugins: [reactRouter(), reactCompiler()],
});
速度到底快多少
一个 1036 个文件的 React Router 项目(Outlyne 网站构建器)的实测数据:
| Babel 版 | Rust 原生版 | 提速 | |
|---|---|---|---|
| 编译器部分 | 14.3 秒 | 0.81 秒 | 17.6 倍 |
| 整体构建时间 | 22.1 秒 | 9.3 秒 | 2.4 倍 |
编译器步骤从 14 秒级别直接掉到不足 1 秒,整体 build 仍然有 2.4 倍提升,因为还有 TypeScript 检查、CSS 处理、打包等环节。
为什么工具链终于一致了
Babel 版 React Compiler 最大的隐患是:Oxlint 用的是 oxc-transform-react(版本跟随 oxc 更新),而 build 用的是 Babel plugin,两者版本错位。
切到 Rust 原生版之后,Oxlint 和构建阶段跑的是同一个编译器,Oxlint 的 22 条 React Compiler 规则(correctness/suspicious/perf 等类别)和构建阶段的编译优化使用完全相同的解析通道。之前那个”lint 没飘红但 build 悄悄跳过组件”的问题,从根上消失了。
还剩两个限制
try 块里的 throw 语句:throw 从 try {} catch {} 抛出时,编译器仍然会跳过该组件。oxc 的 Rust 版已经修了这个问题,Babel 版没有。
逻辑赋值操作符(??=、&&=、||=):这三个写法目前编译器完全不支持,预计暂无修复计划。这是目前最大的硬边界,代码里还在用这些操作符的团队暂时升不了级。
下一步:确认你的项目能不能跑
先检查 package.json 里有没有 babel-plugin-react-compiler 或者 @rolldown/plugin-babel;再数一数 try-catch 块里有没有 throw 语句,以及有没有逻辑赋值操作符。没有的话,安装 oxc-transform-react,改一行配置,十分钟搞定。
CI 等待时间砍掉 60%、工具链版本彻底统一——这件事 Babel 做不到,Rust 可以。
评论区
登录后可评论。