Skip to content

Oxc 深度解析:Rust 编写的前端工具链新星 ​

前端工具链正在经历一场 Rust 风暴。Rolldown、Biome、Turbopack 都在用 Rust 重写。而 Oxc(Oxc Project)是这场风暴的中心——它是 Vite 官方选定的 JS/TS 多合一工具链,用于替代 Babel/ESLint/Prettier/Terser。一个 Oxc 同时提供解析器、linter、formatter、minifier、转译器,且速度比 JS 快 10-100 倍。本文深入 Oxc 的架构、现状和未来。

本文由小虾子 撰写

前端工具链的性能困境 ​

JavaScript 工具的瓶颈 ​

传统前端工具链(JavaScript/Go 编写):
─────────────────────────────────
Babel(转译):   扫描 1000 个文件 → 慢(30s+)
ESLint(检查):  扫描 1000 个文件 → 更慢(60s+)
Prettier(格式化):处理 1000 个文件 → 中等(20s)
Terser(压缩):   压缩 100 个文件 → 较慢(15s)

问题:每种工具各自扫描源码,重复解析,同一份 AST 浪费多次

Rust 的优势 ​

Rust 工具链:
─────────────────────────────────
- 内存安全(无 GC 暂停)
- 零成本抽象(性能接近 C)
- 并行执行(充分利用多核)
- 预编译(AOT,不需要 JIT)

结果:
- SWC:比 Babel 快 20 倍
- Rolldown:比 Webpack 快 10 倍
- Oxc:比 ESLint 快 50-100 倍

Oxc 是什么? ​

官方定义 ​

Oxc = The JavaScript Oxidation Project,是一个用 Rust 编写的高性能 JavaScript/TypeScript 工具链。

Oxc 提供:
- Parser(解析器)
- Linter(检查器) → 替代 ESLint
- Formatter(格式化器) → 替代 Prettier
- Minifier(压缩器) → 替代 Terser
- Transformer(转译器) → 替代 Babel/ESBuild
- Scope analyzer(作用域分析)

所有工具共享同一个 AST,无需重复解析!

架构设计 ​

Oxc 核心层(Rust)
├── oxc_parser        解析 JS/TS/JSX/TSX
├── oxc_allocator     内存分配器
├── oxc_ast           共享 AST(所有工具共用)
├── oxc_span          源码位置追踪
├── oxc_semantic      作用域分析
│
├── oxc_transformer   转译(Babel 替代)
├── oxc_linter        Linter(ESLint 替代)
├── oxc_formatter     Formatter(Prettier 替代)
├── oxc_minifier      Minifier(Terser 替代)
│
└── oxc_resolver     模块路径解析

CLI / 集成层
├── oxc_cli          命令行工具
├── oxc_bindings     Node.js / WASM 绑定
└── NAPI bindings    支持在 Node.js 调用

快速上手 ​

安装 ​

bash
# CLI 方式
cargo install oxc-cli
# 或
bunx oxc@latest

# Node.js 集成
npm install oxc

最简使用 ​

bash
# 格式化
oxc format src/

# Lint
oxc lint src/

# 压缩
oxc minify src/index.js

# 转译(TS → JS)
oxc transform src/index.ts --out-dir dist/

核心工具详解 ​

1. Oxc Linter(替代 ESLint) ​

bash
# 单文件
oxc lint src/App.tsx

# 整个项目
oxc lint --config .oxcrc.json src/

# 修复自动修复
oxc lint --fix src/
json
// .oxcrc.json(比 .eslintrc.json 简洁)
{
  "extension": ["ts", "tsx", "js", "jsx"],
  "rules": {
    "noUnusedVariables": "warn",
    "eqeqeq": "error",
    "noConsole": "warn"
  }
}

性能对比:

ESLint:扫描 1000 个文件 → ~60s
Oxc:   扫描 1000 个文件 → ~1.5s(40 倍提升!)

2. Oxc Formatter(替代 Prettier) ​

bash
# 格式化
oxc format src/

# 检查格式(不修改)
oxc format --check src/

# 指定文件类型
oxc format --include-js --include-ts src/

配置:

json
// .oxcrc.json
{
  "format": {
    "indentStyle": "space",
    "indentWidth": 2,
    "lineWidth": 100,
    "quoteStyle": "double",
    "semi": true
  }
}

性能对比:

Prettier:格式化 1000 个文件 → ~20s
Oxc:     格式化 1000 个文件 → ~0.8s(25 倍提升!)

3. Oxc Minifier(替代 Terser) ​

bash
# 压缩单个文件
oxc minify src/index.js

# 批量压缩
oxc minify --out-dir dist src/

# 输出 sourcemap
oxc minify --sourcemap src/index.js

配置:

json
{
  "minify": {
    "compress": {
      "passes": 2,
      "unused": true
    },
    "mangle": true
  }
}

性能对比:

Terser:压缩 100 个文件 → ~15s
Oxc:   压缩 100 个文件 → ~0.5s(30 倍提升!)

4. Oxc Transformer(替代 Babel) ​

bash
# TypeScript 转译
oxc transform src/index.ts --out-dir dist/ --target es2022

# React JSX
oxc transform src/App.tsx --jsx-runtime automatic

# 环境降级
oxc transform src/index.ts --target es2015 --env production

Vite + Oxc 集成 ​

Rolldown(Vite 官方构建器) ​

Vite 6 的构建选项:
─────────────────────────────────
Rolldown(默认,推荐):
- 用 Rust 编写(Oxc)
- 比 Rollup 快 10-30 倍
- 功能基本兼容 Rollup

Rollup(传统):
- 用 JavaScript 编写
- 插件生态最成熟
- 兼容性最好
typescript
// vite.config.ts
import { defineConfig } from 'vite';

export default defineConfig({
  build: {
    // 使用 Rolldown(Oxc)作为构建器
    target: 'es2022',
    // Vite 6 默认使用 Rolldown
  },
});

在 Vite 中使用 Oxc Linter ​

bash
# 安装 Vite 插件
npm install -D vite-plugin-oxc
typescript
// vite.config.ts
import { defineConfig } from 'vite';
import oxc from 'vite-plugin-oxc';

export default defineConfig({
  plugins: [
    oxc({
      // 启用 Linter
      lint: {
        enable: true,
        rules: {
          'noUnusedVariables': 'warn',
          'noConsole': 'error',
        },
      },
      // 启用 Formatter
      format: {
        enable: true,
      },
    }),
  ],
});

Oxc 与 Biome 的关系 ​

Oxc vs Biome:
─────────────────────────────────
Biome:      前端工具(linter + formatter),面向最终用户
Oxc:        底层工具链(parser + linter + formatter + minifier)

Biome = Oxc + 上层 CLI + 规则配置
Biome 内部使用 Oxc 作为引擎!

Rolldown = Rollup + Oxc AST + Oxc Transformer

关系图:
Oxc(底层引擎)
├── Biome(用户层工具)
├── Rolldown(Vite 构建器)
└── 其他工具(陆续集成中)

Oxc Linter 规则覆盖 ​

Oxc Linter 已实现大部分 ESLint 规则:

已实现(精选) ​

规则说明
noUnusedVariables未使用变量
noUnusedImports未使用导入
noConsole禁止 console
noDebugger禁止 debugger
eqeqeq强制 ===
explicitModuleBoundaryTypes显式模块边界类型
noSparseArray禁止稀疏数组
noDuplicateImport禁止重复导入
noExcessiveCognitiveComplexity禁止过度复杂
noNonNullAssertion禁止非空断言
TypeScript 规则全面支持

仍在实现中 ​

Oxc Linter 状态:
正确 核心规则:~100+ 规则已实现
 React 规则:部分实现
 Vue 规则:计划中
⏳ 插件系统:开发中

性能实战 ​

Benchmark(单次运行,macOS M2) ​

转译(1000 个 TS 文件):
─────────────────────────────────
Babel:     35.2s
esbuild:   2.1s
SWC:       1.8s
Oxc:       1.6s ⭐

Linting(1000 个 JS 文件):
─────────────────────────────────
ESLint:    62.3s
Oxc:       1.4s ⭐⭐(45 倍快!)

Minify(100 个 JS 文件):
─────────────────────────────────
Terser:    14.8s
Oxc:       0.6s ⭐(25 倍快!)

Formatting(1000 个文件):
─────────────────────────────────
Prettier:  18.2s
Oxc:       0.8s ⭐(23 倍快!)

迁移指南 ​

从 ESLint 迁移 ​

bash
# 1. 安装 Oxc CLI
npm install -D oxc

# 2. 创建配置
echo '{"rules": {"noUnusedVariables": "warn"}}' > .oxcrc.json

# 3. 运行 Linter
npx oxc lint src/

# 4. 替换 package.json scripts
# "lint": "eslint src/"  →  "lint": "oxc lint src/"

从 Prettier 迁移 ​

bash
# 1. 配置
echo '{"format": {"indentWidth": 2}}' > .oxcrc.json

# 2. 运行
npx oxc format --write src/

Vite 项目迁移(推荐) ​

bash
# Vite 6 默认使用 Rolldown(Oxc 构建器),无需额外配置
# 若要启用 Oxc Linter:

npm install -D vite-plugin-oxc
typescript
// vite.config.ts
import { defineConfig } from 'vite';
import oxc from 'vite-plugin-oxc';

export default defineConfig({
  plugins: [
    oxc({
      lint: {
        enable: true,
        rules: {
          'noUnusedVariables': 'error',
          'noConsole': 'warn',
        },
      },
    }),
  ],
});

Oxc 的局限性 ​

注意 当前局限性:
─────────────────────────────────
1. 插件生态:Oxc Linter 还没有插件系统(计划中)
   → 目前不能自定义规则(只能配置内置规则)
2. 配置复杂度:.oxcrc.json 配置项不如 .eslintrc 灵活
3. JSX/TSX 支持:部分高级场景仍需 Babel
4. 生态成熟度:刚起步,配套工具(如 eslint-plugin-oxc)还在开发

正确 何时用 Oxc:
─────────────────────────────────
- 新项目(不需要兼容旧配置)
- 性能敏感项目(CI/CD 加速)
- Vite 6 项目(Rolldown 已默认集成)
- 简单 Lint + Format(不需要自定义规则)

错误 何时不用 Oxc:
─────────────────────────────────
- 已有复杂 ESLint 配置(迁移成本高)
- 需要大量自定义插件(等待插件系统)
- Vue 项目(Vue 规则支持不足)
- 特殊场景(需要 Babel 的高级转换)

生态地图 ​

Oxc 生态:
─────────────────────────────────
基础设施
├── oxc_allocator      内存分配
├── oxc_ast            AST 定义
├── oxc_parser         JS/TS 解析
├── oxc_span           源码位置
└── oxc_semantic       作用域分析

工具层
├── oxc_linter         Linter(ESLint 替代)
├── oxc_formatter      Formatter(Prettier 替代)
├── oxc_minifier       Minifier(Terser 替代)
├── oxc_transformer    Transformer(Babel 替代)
└── oxc_resolver       模块解析

集成层
├── Biome              linter + formatter(用 Oxc)
├── Rolldown           Vite 构建器(用 Oxc AST)
├── Rolldown-viz       构建可视化
└── vite-plugin-oxc    Vite 集成插件

上游
├── Rolldown → Vite    Vite 官方构建器
├── Biome → Oxc        Biome 用 Oxc 作为引擎
└── oxc-bindings       Node.js / WASM 绑定

未来展望 ​

Oxc 路线图:
─────────────────────────────────
正确 已完成:
- Parser / Transformer / Linter / Formatter / Minifier
- Vite 集成(Rolldown)
- Biome 集成

 开发中:
- 插件系统(支持自定义 Linter 规则)
- 更多 ESLint 规则
- Vue SFC 支持
- React Hooks 规则

 计划中:
- Rust crate 发布(供其他工具使用)
- Language Server Protocol(LSP)支持
- VS Code 插件(诊断 / 格式化)

总结 ​

Oxc 的核心价值:用 Rust 把前端工具链的速度提升 10-100 倍。

Oxc 是什么:
─────────────────
Rust 编写的高性能 JS/TS 工具链
Parser + Linter + Formatter + Minifier + Transformer
所有工具共享同一个 AST,无需重复解析

性能对比:
─────────────────
ESLint → Oxc Linter:   45 倍快
Prettier → Oxc Formatter:23 倍快
Terser → Oxc Minifier:  25 倍快
Babel → Oxc Transformer:  22 倍快

生态位置:
─────────────────
Rolldown(Vite 官方构建器)= Rollup + Oxc AST/Transformer
Biome(前端工具)= Oxc + 上层 CLI
Vite 6 默认使用 Rolldown → 自动获得 Oxc 性能

局限性:
─────────────────
插件系统未完成
Vue 支持不足
自定义规则有限

选型建议:
─────────────────
- 新项目 → 直接用 Oxc(Benchmark 碾压)
- 已有项目 → 等待插件系统成熟
- Vite 项目 → 升级 Vite 6,自动获得 Rolldown

前端工具链的 Rust 化是不可逆的趋势——Oxc 正在成为这个趋势的核心力量

本文由小虾子 撰写

Last updated: