配了八年 JS 工具链,今天才发现根子在一个解析器里——Oxc 把前端工具链的性能底座彻底变了

写了八年前端,你一定见过这个场景:ESLint 跑 30 秒,Prettier 10 秒,Babel 又来一遍。每个人的 CI 里都躺着这几个老面孔,慢得要命但谁也不敢砍——砍了 bug 就多。忍了几年,今天发现根子不在这些工具本身,是在一个没人想过要换的底层组件里:解析器。

Oxc 就是那个被换掉的底层组件。这个 Rust 写的前端工具链,已经不只是一个 linter,它把整个 JS 工具链从根上重写了一遍——而且六件套之间共用同一套 AST,解析一次,全链路复用。

从解析器开始:整个工具链的瓶颈都在这里

90% 的 JS 工具第一步都要回答同一个问题:这段代码是什么?const 是什么?user 是什么?string 是类型还是字符串?

为了回答这个问题,ESLint 要解析一遍,Prettier 解析一遍,Babel 再解析一遍,TypeScript 编译器再解析一遍。同一个文件,四个工具解析出四个 AST。这是 JavaScript 工具链最大的隐性成本。

Oxc 的思路很简单:解析器只做一个,AST 只生成一次,然后 lint、format、transform、minify 全在这个 AST 上跑。不同工具不再重复造轮子。

这就是为什么 Oxc 要叫「Oxidation Compiler」——氧化 rust 是金属被氧气腐蚀的过程,这里是把 JS 工具链「腐蚀」成 Rust 的意思。

六件套:每个都是同档最快

Oxc 实际上由六个独立工具组成,全都可以单独使用,也可以组成完整工具链:

oxlint — ESLint 的替代品。npm 下载量每周 600 万次,Preact、Shopify、ByteDance、Shopee 都在用。核心优势:50 到 100 倍快于 ESLint,零配置开箱即用,支持 ESLint 的禁用注释语法,规则命名与 ESLint 完全兼容。不支持自定义 ESLint 插件,但可以通过 npx @oxlint/migrate 自动迁移配置,2026 年 3 月还上线了 JS Plugins Alpha,接近 100% 兼容现有 ESLint 插件生态。

oxfmt — Prettier 的替代品。目前是 Beta 版本,主打 Prettier 兼容格式化和 30 倍以上的吞吐量提升。支持 GraphQL 模板字面量格式化,Vue SFC 支持也在完善中,可以直接替代 Prettier 作为项目格式化工具。

oxc-parser — 最快的 JS/TS 解析器。npm 每周下载 1000 万次以上,比 SWC 快约 3 倍,比 Babel 快约 5 倍。支持完整的 ESNext、TypeScript、JSX/TSX 和 Decorators,通过 NAPI 直接暴露 AST,第三方工具可以拿它做自定义分析。

oxc-transform — Babel 的替代品。提供与 Babel 兼容的 AST 转换,支持 TypeScript 剥离、JSX 编译、Decorator 支持、React Fast Refresh 和 ECMAScript 降级。也是 Rolldown 的底层变换引擎。

oxc-minify — Terser 的替代品。目前处于开发阶段,目标是与 Terser 输出兼容但速度达到 3 到 5 倍提升,性能与 swc-minify 持平。

oxc-resolver — enhanced-resolve 的替代品。Node.js 模块解析,比 webpack 内置的 enhanced-resolve 快 28 倍。Rolldown、swc-node 和 knip 都在用。

这六个工具中,parser 和 oxlint 是生产就绪状态;transformer 和 minifier 作为 CLI 还在 pre-1.0,但已经跑在 Rolldown 和 Vite 8 内部的生产环境里;formatter 是 Beta。简单说:今天你最应该用的是 oxlint,其他工具在 Vite/Rolldown 项目里已经间接在用了。

共享 AST 架构:这件事为什么关键

传统 JS 工具链里,每个工具独立解析文件。而 Oxc 的核心架构是「一次解析,多工具复用」:

底层是一个用 Rust Bump Allocation 实现的 AST 分配器,预先分配一块内存,数据按指针移动方式堆积,分析完成后一次性清理整块内存,完全没有垃圾回收的停顿开销。分析过程跨 CPU 核心并行化,多文件同时处理。

在这个共享 AST 之上,lint、format、transform、minify 各自运行自己的分析逻辑,不再重复解析。Rolldown 作为 bundler,用 oxc-parser 做解析,用 oxc-transform 做变换,用 oxc-minify 做压缩——一套 AST,三个工具同时工作。

这个架构的副产品是:只要解析器快,所有工具都跟着快。Oxc 官方数据显示,parser 比 SWC 快约 3 倍,oxlint 比 ESLint 快 50 到 100 倍,oxfmt 吞吐量是 Prettier 的 30 倍以上。

实际落地数据更有说服力。Cloudflare 在 2026 年把 ESLint 整体切换到 Oxlint,每天节省了 3.75 天的计算资源——不是快了 3.75 天,是一天省出了将近四天的算力。VSCode 4800 个文件用 oxlint 跑完只要 0.7 秒,用 ESLint 要 20 秒。Sentry 带类型分析的更大规模项目里,oxlint 0.5 秒,ESLint 要 31 秒。

Cloudflare 收购 VoidZero:工具链变天了

2026 年 6 月,Cloudflare 宣布收购 VoidZero——Evan You 创立的这家工具链公司,旗下有 Vite、Vitest、Rolldown 和 Oxc 四块核心资产。收购之后,所有项目继续 MIT 协议开源,Cloudflare 拿出 100 万美元成立了独立基金专门供养 Vite 维护者社区。

这个收购对前端工具链格局的影响是结构性的:Cloudflare 本身有 Workers、Pages、D1 等边缘计算产品,VoidZero 的工具链和 Cloudflare 的基础设施深度绑定,意味着未来前端工具链的性能优化不再只是开发体验的事,还直接关系到边缘部署成本。Rolldown 打包产物更小,边缘冷启动就更快,这笔账云厂商比谁都清楚。

另一个维度:Cloudflare 收购后 Vite 生态会更加封闭还是更开放,目前还不确定,但可以确定的是——Rust 工具链已经从「小众极客玩具」变成了「主流商业公司重兵投入的基础设施」。

迁移路径:今天就能用的和现在别碰的

不是所有 Oxc 组件都适合今天就全面替换,有三个梯度:

oxlint,可以直接换掉 ESLint。 跑一下 npx @oxlint/migrate 自动迁移配置,配置格式和 ESLint 几乎一样,现有 // eslint-disable 注释全部兼容。最稳妥的路径是先在 CI 里并行跑 oxlint 和 ESLint,逐步把 ESLint 规则迁移过去。不支持的是自定义 JavaScript ESLint 插件,如果你的项目重度依赖这类插件,先不要动。

oxfmt,可以试点。 npx oxfmt --init 生成默认配置,Prettier 用户的配置大部分直接可用。建议先在非核心项目里跑一段时间,看有没有格式差异再迁移主项目。

transformer 和 minifier,不要自己手动迁移。 交给 Vite 8。Rolldown 已经在 Vite 8 里把 Oxc 的变换和压缩跑在生产环境了,如果你用 Vite,升级到 8 就自动用上了,不需要单独配置。

Oxc 六件套的本质是一个赌注:前端工具链最大的瓶颈不是某个 linter 太慢,而是所有工具都在重复做同一件事——解析。解决根上的重复,枝叶自然快。2026 年这个赌注已经开始兑现了。

评论区

0 条评论

登录后可评论。

铁锈·Rust工具链 132 阅读