ESLint vs Prettier:2024年代码格式化工具怎么选?

2024年,一个前端开发者平均每天要处理3000行代码。其中至少200次是手动调整缩进、删除多余空格、或者把单引号改成双引号。这些琐事占用了15%的编码时间。

两个工具试图解决这个问题:ESLint和Prettier。但它们走的是完全不同的路。

它们不是一回事

很多人以为ESLint和Prettier是竞品。这是个误会。

ESLint诞生于2013年,核心是“代码质量检查”。它能发现你用了未定义的变量,提醒你函数太复杂,或者禁止使用eval()。它像一位严格的代码审查员。

Prettier在2017年出现,核心是“代码格式化”。它不管你的逻辑对不对,只管代码长得是否整齐。它像一位强迫症排版师。

据npm官方数据,2024年ESLint周下载量约2500万次,Prettier约1800万次。两个都在增长,但ESLint的生态更庞大。

冲突的根源

问题出在重叠区域。ESLint的规则里,有一部分也管格式化。比如缩进用几个空格、语句末尾要不要分号。Prettier也管这些。

2018年,这两个社区吵得不可开交。开发者发现,同时用ESLint和Prettier时,一个说要加空格,另一个说要删掉。

解决方案后来统一了:让ESLint只做代码质量检查,格式化交给Prettier。具体做法是关闭ESLint中所有与格式相关的规则,用eslint-config-prettier这个配置包。

据GitHub统计,这个配置包每月被引用超过500万次。说明绝大多数团队已经接受了分工。

2024年的实际情况

说几个真实场景。

如果你在用TypeScript + React,并且团队有10人以上。ESLint几乎是必须的。它能捕获any类型的滥用,能禁止未使用的import。Prettier则是锦上添花,让代码风格统一。

如果你是小团队或单人项目,只用一个也够。Prettier上手快,配置简单。ESLint配置复杂,但规则更细。

还有一个趋势:VSCode的用户直接装两个插件。ESLint插件在保存时检查错误,Prettier插件在保存时格式化。据VSCode市场数据,这两个插件的安装量都超过3000万。

性能与维护成本

ESLint的检查速度比Prettier慢。一个中等规模项目(500个文件),ESLint全量检查需要3-5秒,Prettier只需要1-2秒。

但ESLint支持增量检查,只扫描修改过的文件。实际开发中,大部分场景感觉不到延迟。

维护成本上,Prettier几乎零配置。ESLint需要团队约定规则,新人上手成本高。据Stack Overflow 2024年调查,38%的开发者认为ESLint配置“麻烦”。

到底选哪个

2024年,主流的做法是两个都用,但各司其职。

  • 用ESLint检查代码质量:禁止未定义变量、限制复杂度、规范命名。
  • 用Prettier格式化代码:统一缩进、分行、引号、分号。

如果你只能选一个,看你的痛点:代码风格混乱选Prettier,逻辑漏洞多选ESLint。

别纠结。这两个工具不是非此即彼,而是互补。就像刷牙和洗脸,你不需要选。