配了八年 ESLint 加 Prettier,今天才发现一个 Rust 二进制把它们全替了——这件事把前端格式化的账彻底变了
你的项目里现在跑几个工具?eslint、prettier、typescript、@typescript-eslint/parser、eslint-config-prettier、eslint-plugin-react……光配置文件就四五个,每次新人入职第一件事就是问「这些插件版本怎么配的」。这堆东西凑在一起,lint 跑 94 秒,format 跑 41 秒,tsc 跑 76 秒,加起来三分钟没了。
Biome v2 把这件事彻底变了。
它不需要 tsc 就能做类型感知检查
这是 Biome v2 最值钱的地方。ESLint 的类型规则(noFloatingPromises、noMisusedAwait)之所以能跑,是因为它调用了 TypeScript 编译器建类型图。这个过程在大项目里可以慢到 30 到 60 秒。
Biome v2 自己写了一套 Rust 版的类型推断引擎。它直接从 AST 里推导类型,不调 tsc,不装 @typescript-eslint,不跑额外的编译步骤。目前能覆盖 typescript-eslint 约 75% 的类型规则,这个数字还在涨。
这意味着:以前你跑 ESLint 类型检查需要两步——先 tsc –noEmit,再 eslint –ext .ts。现在只需要 npx biome ci,20 秒内跑完 lint 加 format 加类型警告。
性能数据是硬邦邦的
同样是 240K 行 TypeScript 单仓库:
| 操作 | 原来(JS) | 现在(Rust) | 提升 |
|---|---|---|---|
| 全量 lint | 94 秒(ESLint) | 1.7 秒(Oxlint) | 55x |
| 全量 format | 41 秒(Prettier) | 0.9 秒(Biome) | 45x |
| 类型检查 | 76 秒(tsc) | 8 秒(tsgo) | 9.5x |
| 内存占用 | 2.5 GB | 280 MB | 89% 节省 |
这些不是跑在 NASA 服务器上的 benchmark,是 mid-size 单仓库真实数字。
迁移成本比你想象的低
很多人以为换工具链要重写配置,其实不需要。Biome 自带迁移命令:
npx @biomejs/biome migrate eslint --write
npx @biomejs/biome migrate prettier --write
它会把你的 .eslintrc 和 .prettierrc 读一遍,生成对应的 biome.json,规则一一映射,支持 122 条 ESLint 规则,包括 TypeScript、React、JSX-A11y 和 import 插件的核心规则。
迁移完之后,package.json 里的 devDependencies 从 127 个包砍到 1 个二进制,.eslintrc.json、.prettierrc、.eslintignore、.prettierignore 四个文件删掉,CI 里的多步变成一步:
# 原来
- run: eslint .
- run: prettier --check .
- run: tsc --noEmit
# 现在
- run: biome ci .
唯一要注意的坑
Biome 不支持 ESLint 插件。如果你的项目重度依赖 eslint-plugin-react-hooks、eslint-plugin-import,或者其他没有 Biome 等效规则的自定义插件,不能一步全换。
实际路径是:format 先迁到 Biome(Prettier 兼容性 97%,基本无感),lint 保留 ESLint 只跑那些插件规则,然后逐步把能迁的规则迁过去。这个过渡期通常两到四周。
下一步你可以做一件实事
花十分钟在本地跑一下 npx @biomejs/biome migrate eslint –write,看看它生成了什么配置,能覆盖你现有规则的百分之多少。如果覆盖率在 80% 以上,你其实已经没有理由继续撑着 ESLint 那套了。
这件事本质上是:以前你需要花三分钟等工具,现在工具花三秒等你。把这些时间省下来,比追任何新框架都实在。
评论区
登录后可评论。