折腾了一圈 linter/formatter,我又回到了 eslint
背景
最近想折腾一下 linter/formatter 了,主要是 eslint 体验很一般:
- v9 带来的 breaking changes 太大
- flat config 的生态太差,很多插件的文档还是只提供旧的配置,没法直接复制,得自己手动翻译成 flat config 版本
- 旧的配置迁移到 flat config 官方的迁移工具不好用,功能是等价了,但是不是最优的代码
- 还放弃了对格式化的支持(开发者不建议用,但是可以强行用),现在直接用 eslint 进行 ts 的格式化体验不好
- 在大型仓库中,ESLint 的运行速度也较慢,影响开发效率
其他新选择
oxlint
这个是最新前端工具链 oxc 的一部分,用 rust 编写并且有一些别的优化,比 eslint 快几十倍
浅尝了一下,主要发现这几个比较难受的点:
只支持 json 配置文件
并且出于一些考虑,未来也只支持 json 配置文件
虽然 json 和 js 的生态非常相关,而且 oxlint 也支持 jsonc,在 js 这里我还是更喜欢用这个语言给自己写注释,而不是引入什么 DSL(点名批评 Prisma,虽然 json 已经流行到不算什么 DSL 了)
不支持 html lint
这个是最难绷的,oxlint 也是 voidzero 的成员,居然不先把自家框架 vue 支持了
而且这个支持看起来遥遥无期,不在官方计划内,不过第三方社区可能会提交支持
不支持 formatter
我个人是不太愿意再用 prettier 的,formatting 方案是 oxlint + prettier,那我为啥不用 eslint + prettier 呢
生态不足
这个应该无需多言了,看眼文档中的插件列表就清楚了
而且从中文技术社区(知乎、v2ex、linux.do、掘金等)来看,搜索 oxlint 得到的内容寥寥无几
很难不让人怀疑这是个玩具项目,有无数的坑等着使用者踩,我先缩了,等别人踩踩再说
而且从 github 来看,oxc 的人手非常不足,oxlint 很依赖核心开发者并且特性推进缓慢
biome
也是一个 linter,同样性能比 eslint 好很多
只支持 json 配置文件
这一点和 oxlint 一样
勉强支持 html
虽然目前(2025-05-19) biome 还不支持 html lint,但是在 2.0 beta 版里支持了,这个是一个很大的利好
支持 formatter
比 oxlint 好很多,至少不用多一个依赖了
总结
对于我的使用场景来说,自己的小项目没有性能瓶颈,完全不需要从 eslint 切换到别的依赖
对于公司的项目来说,没有 monorepo 的基础(内网连 pnpm 都没有),也不需要考虑性能问题
而且只能使用某些版本的二进制文件(vscode 和插件),只能使用低版本 eslint,我还是不切换了吧
等 biome v2 稳定后,我可能会在一些小项目上试用 biome,当前还完全没有必要