npm装了八年ESLint,今天Oxlint把CI跑完的时间从一首歌变成了一句话
npm装了八年ESLint,今天Oxlint把CI跑完的时间从一首歌变成了一句话。
你上次等CI lint结果的时候干了什么?刷了两条视频?去倒了杯水?回来发现还没跑完?
这不怪你。ESLint v8跑一个200文件的React项目要3秒,1000文件要15秒,VS Code那种体量的代码库要25秒。人在CI前面等lint,本质上是在等一个JavaScript虚拟机冷启动——这不是工具慢,是runtime的天花板就卡在那儿。
2026年,前端圈终于给出了答案:Oxlint。
三句话讲清楚Oxlint是什么
Oxlint是Rust写的ESLint替代品,Oxc项目出品。官方benchmark数据(基于VS Code源码,3684个文件):
| 工具 | 耗时 | 相对速度 |
|---|---|---|
| ESLint v8 | ~25s | 1x |
| Oxlint | ~250ms | 100x |
Shopify实测:原来ESLint跑75分钟,切Oxlint后10秒。
不是数字游戏——是物理。Rust编译成native binary,没有JIT、没有GC、没有Node.js启动开销。解析AST这件事,Rust天生比JavaScript快一个数量级。
ESLint 9 flat config:你自己先变快了
ESLint v9(2026年2月发布)做了一件正确的事:废弃了.eslintrc.*层叠配置,改用eslint.config.js单文件flat config。
这不只是配置格式的变化——这是性能优化的开始。
Johal.in对12个企业级monorepo(10~100个包)的基准测试结果:
| 指标 | Legacy Config | Flat Config | 提升 |
|---|---|---|---|
| 30包monorepo配置文件数量 | 31个 | 1个 | -96.8% |
| 500文件配置解析时间 | 1870ms | 210ms | -88.8% |
| 1K文件lint内存占用 | 142MB | 47MB | -66.9% |
| 重复运行时间(含缓存) | 920ms | 110ms | -88% |
| 配置解析占总CPU时间 | 34% | 6% | -82.4% |
换句话说:光升级到ESLint 9 flat config,你的lint就能快一截。但这还不够——flat config只是让你少跑冤枉路,ESLint本身的执行速度没变。
Oxlint 1.0现在能做什么
2026年8月Oxlint 1.0发布,覆盖情况:
✅ 已覆盖
- ESLint核心规则(200+)
- TypeScript ESLint规则
- React / JSX / Vue规则
- Jest / Vitest规则
- Unicorn / JSX-a11y等社区规则
❌ 暂不支持
- 部分老旧插件的规则(如eslint-plugin-import部分规则)
- 类型感知规则(tsgo正在做,2026年底有望)
实操数据:200+文件的React项目,ESLint 9 flat config 3.2秒,Oxlint 1.0 0.08秒——40倍差距。
三种迁移策略,总有一款适合你
策略一:渐进混合(大型项目推荐)
适合:已有深度ESLint配置、团队成员多、不能一刀切的项目。
pnpm add -D oxlint eslint-plugin-oxlint
在eslint.config.js里:
import oxlint from 'eslint-plugin-oxlint'
export default [
oxlint.configs.recommended, // Oxlint先跑
// 你的其他配置...
]
原理:Oxlint先过滤它支持的规则,ESLint只处理Oxlint不支持的。两边并行,互不干扰。
Shopify/Airbnb/Mercedes-Benz这些大厂的生产路径:Oxlint做CI前置过滤,ESLint保留深度规则。大项目hybrid模式实测:Oxlint ~1秒 + ESLint只跑剩余规则 ~2-3秒,总时间从20秒+降到3秒以内。
策略二:直接全切(中小项目推荐)
适合:文件数<500、主要用React/Vue+TypeScript、没有深度定制ESLint插件的项目。
pnpm remove eslint
pnpm add -D oxlint
npx oxlint@latest --init
配置文件.oxlintrc.json:
{
"plugins": ["react", "typescript"],
"rules": {
"react/no-unknown-property": "error",
"no-unused-vars": "warn"
}
}
CI替换:
# 之前
- run: npx eslint .
# 之后
- run: npx oxlint .
策略三:先跑benchmark再决定
所有速度 claims 都是别人的数字。你的repo才说了算:
npx eslint . --format json > eslint-result.json
npx oxlint . --format json > oxlint-result.json
# 比对规则覆盖率
Biome v2:一个工具同时 lint + format
补充一个2026年新玩家:Biome v2。
Biome = Prettier(格式化)+ ESLint(linting),Rust实现,423条规则,内置formatter不需要Prettier。
横评定位:
- ESLint:最完整生态,700+规则,4000+插件,但最慢
- Oxlint:最快,300条规则,lint only,适合做CI速度层
- Biome:格式化+lint合一,423规则,10-20x快于ESLint,适合新项目
新项目建议:Biome day one + React项目加一行ESLint专门配react-hooks。这是2026年最低摩擦的现代化前端配置。
下一步
- 今晚:跑
npx oxlint --init,看它报哪些规则不支持 - 本周:benchmark你的真实项目:
time npx eslint .vstime npx oxlint . - 下个月:选迁移策略,CI里加一个Oxlint前置步骤,先看到提速收益再动深度配置
ESLint不会死——它的生态深度无可替代。但2026年了,你的CI不该再等一个JavaScript虚拟机热身。
评论区
登录后可评论。