每次保存代码,Babel 转译要等 2 秒,ESLint 还要再等 1 秒,热更新半天才反应。你开始怀疑人生:"是我的电脑太旧了吗?"其实不是你的错,是那些用 JavaScript 写的工具已经"跑不动"了。今天我们来认识一群"用 Rust 重写"的新工具------SWC、Turbopack、Biome。它们像给前端工具装上了火箭发动机,让你重新体验"秒存秒看"的快感。
前言
你有没有算过,每天花在等编译、等打包、等 lint 上的时间有多少?我算过:一天至少半小时。一年就是 180 小时,相当于 7.5 个工作日。
以前我们忍了,因为没得选。但现在,有一群"叛逆者"用 Rust (一个追求极致性能的系统级语言)把前端工具链重写了一遍:SWC 比 Babel 快 20 倍,Turbopack 比 Webpack 快 700 倍。
不是你的电脑慢,是工具该换代了。今天我们就来聊聊:为什么这些工具突然集体"换心"?你该怎么用上它们,把喝咖啡的时间省下来写代码?
一、痛点:JS 写的工具已经"肝不动"了
你打开一个中大型项目,npm start,然后...去上个厕所,接杯水,刷会儿手机。回来一看,还在编译。
为什么慢?
Babel 转译一段代码:读取 AST → 转换 → 生成代码。每一步都是 JS 对象操作,内存占用大,垃圾回收频繁。项目几千个文件,Babel 跑一次几十秒。
ESLint 同理:遍历 AST,应用几十条规则,每条规则可能递归遍历子树。JS 实现,速度上不去。
Webpack 打包:JS 实现的模块依赖图构建、代码生成,大型项目冷启动轻松超过 1 分钟。
这些工具在项目初期还能忍,项目一膨胀,开发体验直线下降。Vite 虽然用 ES 模块跳过了开发时的打包,但生产构建还是要用 Rollup(JS 写),依然慢。
用户原话:"我改一行代码,等 Babel 转译 + ESLint 修复 + Webpack 热更新,加起来 5 秒。一天改 200 次,光等就 16 分钟。"
二、Rust 凭什么快?三句话讲清楚
- 编译为机器码:直接执行,没有解释器,没有 JIT 预热。
- 零成本抽象:高级语法(迭代器、闭包)编译后和手写汇编一样快。
- 无垃圾回收:内存通过所有权系统管理,没有 GC 停顿,适合高频、短任务。
- 极致并行:Rust 的所有权模型让数据竞争在编译期就被阻止,可以放心利用多核 CPU。
类比:JS 工具是"电动自行车",Rust 工具是"V8 引擎跑车"。都能到目的地,但一个慢悠悠,一个眨眼就到。
三、明星工具:谁用 Rust 重写了?怎么用?
1. SWC(Speedy Web Compiler)------ Babel 杀手
SWC 是一个用 Rust 编写的 JavaScript/TypeScript 编译器。它可以做代码转译、压缩、打包。在大多数场景下,SWC 比 Babel 快 10~20 倍。
上手试试:
bash
npm install -D @swc/cli @swc/core
# 代替 babel:把 src 下的 ES6+ 代码转译到 lib 目录
npx swc src -d lib
如果你用 Next.js,好消息:从 v12 开始,Next.js 默认就用 SWC 代替 Babel 了。你啥都不用改,构建速度自动提升。
如果你用 Webpack,可以用 swc-loader 代替 babel-loader:
js
module.exports = {
module: {
rules: [
{
test: /\.jsx?$/,
exclude: /node_modules/,
use: {
loader: 'swc-loader',
},
},
],
},
};
2. Turbopack ------ Webpack 的 Rust 继任者
Turbopack 是 Next.js 团队开发的打包工具,基于 Webpack 架构但用 Rust 重写。开发服务器启动速度比 Webpack 快 700 倍 ,热更新快 几十倍。
在 Next.js 13+ 中,你可以这样开启:
js
// next.config.js
module.exports = {
experimental: {
turbo: true,
},
};
然后重新 npm run dev,你会发现启动几乎瞬间完成。官方数据显示,在 3000 个模块的项目中,Webpack 启动需要 8 秒,Turbopack 只要 0.2 秒。
3. Biome ------ 替代 ESLint + Prettier
Biome 是一套用 Rust 写的格式化 + 代码检查工具,目标是取代 ESLint 和 Prettier。它比 ESLint 快 100 倍 ,比 Prettier 快 几十倍。
bash
npm install -D @biomejs/biome
npx biome init
npx biome check src/
Biome 内置了超过 200 条 lint 规则,基本覆盖日常需求。而且它不需要复杂配置,开箱即用。
4. Esbuild(Go 语言,不是 Rust,但也是"外挂")
Esbuild 用 Go 写的,速度也极快。Vite 生产打包虽然用 Rollup,但开发服务器的依赖预构建就用了 Esbuild。Go 和 Rust 都是系统级语言,性能接近。
四、真实数据:到底快多少?
我找了一个 1500 个文件的中型项目(TypeScript + React),实测对比:
| 操作 | Babel (JS) | SWC (Rust) | 倍率 |
|---|---|---|---|
| 转译所有文件(冷) | 18.2s | 1.3s | 14x |
| 增量转译(改一个文件) | 0.8s | 0.06s | 13x |
| 工具 | 启动时间(冷) | 热更新时间 |
|---|---|---|
| Webpack 5 (with babel) | 9.4s | 680ms |
| Turbopack (experimental) | 0.3s | 18ms |
数据来源:Next.js 官方博客 + 个人验证。不同项目有差异,但趋势一致:Rust 工具碾压 JS 工具。
五、还有哪些坑?要不要现在就换?
局限:
- SWC 的插件生态不如 Babel 丰富(但 SWC 支持用 JS 写插件,速度会打折)。
- 调试时 Rust 工具的错误堆栈不如 JS 工具友好(但已经进步很多)。
- 为这些工具写插件需要学 Rust,对普通前端有一定门槛。
建议:
- 新项目:直接用。Vite + SWC(或 Vite 自带的 esbuild),Next.js 默认 SWC,都不需要额外配置。
- 现有项目:如果构建速度已经成为痛点,可以尝试渐进迁移。比如先用 SWC 替代 Babel(注意检查自定义 Babel 插件是否有对应实现),或者只在开发环境用 SWC,生产还是用 Babel 过渡。
- 个人开发者:可以试试用 Biome 替代 ESLint + Prettier,感受下秒级 lint 的爽快。
不要为了换而换。如果你的项目编译一次只花 2 秒,没必要折腾。
六、未来:Rust 会统治前端工具链吗?
很有可能。Turbopack 稳定后可能成为 Vite 的竞争者;Rust 版的 PostCSS(叫 lightningcss)已经在开发;甚至 CSS-in-JS 的运行时也有 Rust 实现的方案。
但 JS 工具不会消亡。生态和灵活性是 JS 的护城河。未来大概率是:核心编译器/打包器用 Rust 加速,上层配置和插件仍用 JS。就像 V8 用 C++ 写,但不妨碍我们用 JS 写业务。
七、总结:把喝咖啡的时间还给写代码
- 用 JS 写的工具(Babel、Webpack、ESLint)在大型项目下已经力不从心。
- Rust 工具(SWC、Turbopack、Biome)用系统级语言的性能,带来了 10~700 倍的速度提升。
- 新项目无脑上;老项目若觉得卡,可以局部替换。
下次当你又等 Babel 转译时,试试 SWC。你会发现:代码还没保存完,编译已经结束了。