我装了六个 Rust 前端工具,今天才发现它们全是同一个祖先——这件事把前端工具链的格局彻底变了
配了三年 Rust 写前端工具,你会发现一个有意思的现象:今天查 oxlint,明天查 oxc-parser,后天查 oxc-resolver,装着装着才发现它们全是同一家公司的作品。VoidZero 的 Oxc 项目,今天把这件事彻底收口了——它不是六个工具,它是一套完整的 JavaScript 工具链,而且全用 Rust 写的。
Oxc 的全称是 The JavaScript Oxidation Compiler,官方的定义很直接:高 performance JavaScript 工具集合,全部用 Rust 写。目前它旗下有六个工具,覆盖了从代码解析到压缩的完整链路。
- oxlinter:ESLint 兼容的 linter,官方数字 50~100x 比 ESLint 快,支持 ESLint JS 插件,800+ 规则,而且它是 type-aware 的
- oxfmt:Prettier 兼容的 formatter,30x 比 Prettier 快,3x 比 Biome 快,还支持 Tailwind class 排序
- oxc-parser:TypeScript 和 JavaScript 的解析器,3x 比 SWC 快,通过了所有 Test262 stage4 测试
- oxc-transform:代码转译,支持 TypeScript、JSX、语法降级到 ES2015,还支持 React Fast Refresh、styled-components 等
- oxc-resolver:Node.js 兼容的模块解析,CJS 和 ESM 都支持,28x 比 enhanced-resolve 快
- oxc-minifier:代码压缩(Alpha 阶段),做 dead code elimination、语法缩短、变量名 mangling
性能数据不是吹的。Oxc 官方有个 benchmark:在 Macbook Pro M3 Max 上解析 typescript.js 文件,Oxc 只需要 26.3ms,SWC 要 84.1ms,Biome 要 130.1ms。Oxc 比 SWC 快 3 倍,比 Biome 快 5 倍。
为什么这件事值得单独说
前端工程师日常要和一堆工具打交道:解析用 babel/swc,lint 用 ESLint,format 用 Prettier,压缩用 Terser,解析路径用 enhanced-resolve。这些工具来自不同团队、不同仓库、不同维护者,升级的时候要分别盯。
Oxc 把这件事合并了。你用 Vite 8+,Rolldown 底下跑的就是 Oxc 的解析器;你用 Vite 的开发服务器,Rolldown 接管构建;你跑 lint,oxlinter 可以直接替代 ESLint;你格式化代码,oxfmt 可以替代 Prettier。这意味着你的工具链底层全是同一套 Rust 代码,版本升级可以一起升,出问题定位路径也更短。
拿我自己的经历来说:去年项目里同时用了 SWC(解析)、ESLint(lint)、Prettier(format)、Terser(压缩),四个工具的配置文件加起来快一百行了。后来切到 Oxc 全家桶,配置文件少了一大半,构建速度还快了两倍。Rolldown 1.0 发布的时候,尤雨溪说过一句话:Vite 8 背后的目标之一就是统一开发服务器和生产构建的底层,让它们用同一套工具链。
具体快多少
光说数字不够直观,几个常见场景:
解析 TypeScript 文件,Oxc 比 SWC 快 3x;格式化代码,Oxc 比 Biome 快 3x,比 Prettier 快 30x;路径解析,Oxc 比 enhanced-resolve 快 28x;lint,Oxlint 比 ESLint 快 50~100x。热更新更快,CI 构建更快,lint 在保存时几乎感觉不到延迟。
最意外的是 oxc-resolver 的 28x。这个工具平时存在感不强,但它决定了 npm install 之后你的 bundler 能不能找到所有模块。慢的 resolver 会让大型 monorepo 的首次构建时间直接翻倍。
迁移成本高不高
这是最实在的问题。Oxc 的策略是尽量兼容现有生态:
- Oxlint 是 ESLint 兼容的,你现有的 ESLint 配置基本可以直接迁移
- oxfmt 是 Prettier 兼容的,.prettierrc 配置可以直接用,不需要重新学配置语法
- oxc-transform 支持 TypeScript、JSX、React Fast Refresh,既有项目迁移不需要改业务代码
- Rolldown 已经接入了 Vite 8,只要你用 Vite,不需要单独装 Oxc,它已经在那儿了
当然,oxc-minifier 还处于 Alpha 阶段,生产环境用之前建议先跑一遍完整测试。另外 oxlinter 的 type-aware linting 需要配合 tsgo(Oxc 的类型推断引擎),配置比纯 JS 的 ESLint 稍复杂一点。
下一步怎么走
如果你现在用 Vite 8+,Rolldown 已经接管了构建这一步,你已经在用 Oxc 了。剩下的可以逐个替换:
第一步,把 ESLint 换成 Oxlint,改个包名、调一下配置,lint 速度提升 50~100x;第二步,把 Prettier 换成 oxfmt,Prettier 配置直接迁移,格式化速度提升 30x;第三步,把 Terser 换成 oxc-minifier(等 Alpha 阶段结束后),压缩速度会显著提升。
这三步做完,你的项目工具链底层全是 Oxc,全是 Rust,没有 Node.js 那层 runtime 了。
工具链这件事,之前大家习惯了够用就行,但 Rust 工具的性能优势和统一维护的便利性正在改变这个局面。当同一家公司用同一套语言写出解析器、linter、formatter、transformer、resolver、minifier 六件套的时候,这件事本身就已经是答案了——前端工具链的格局变了,不是变大,是变统一了。
相关工具:Oxc(https://oxc.rs/)、Rolldown(Vite 8 内置)、Oxlint(ESLint 替代)、oxfmt(Prettier 替代)、oxc-minifier(压缩)、oxc-resolver(路径解析)
评论区
登录后可评论。