ESLint vs Prettier 2024:别再二选一了,这才是正确用法
2023年Stack Overflow调查显示,87.6%的开发者使用代码格式化工具。但一个尴尬的现实是:很多人还在纠结ESLint和Prettier该用哪个。
两个工具我都用了五年,踩过坑,也见过团队因为选错工具导致代码风格混乱。今天直接说结论:不是二选一,而是各司其职。
它们根本就不是一个东西
很多人把ESLint和Prettier混为一谈,这是最大的误解。
ESLint是代码质量工具。它检查的是:变量是否定义了但没使用、有没有写了死循环的风险、异步操作是否正确处理。说白了,它抓的是逻辑错误。
Prettier是代码格式化工具。它只关心:括号要不要换行、缩进用2空格还是4空格、字符串用单引号还是双引号。它不关心你的代码能不能跑,只关心好不好看。
一个抓bug,一个整容。你见过让整形医生去做体检的吗?
2024年的最佳实践
经过多个项目的实践,现在最稳妥的方案是:
用ESLint做代码质量检查,用Prettier做代码格式化。 两者用配置文件明确分工。
具体操作分三步:
第一,安装ESLint和Prettier,以及eslint-config-prettier这个插件。它的作用是把ESLint中和格式相关的规则全部关掉,避免和Prettier打架。
第二,在ESLint配置里只保留逻辑检查规则。比如:
{
"rules": {
"no-unused-vars": "error",
"no-console": "warn"
}
}
第三,Prettier负责所有格式问题。比如单引号、行宽、末尾逗号这些。
曾经有个团队,ESLint配置了200多条规则,每次提交代码要等30秒检查。后来砍掉格式规则,只保留逻辑检查,速度提升到5秒。
一个容易忽略的坑
就算配置好了,还有个常见问题:保存代码时自动格式化。
很多人习惯在VS Code里设置"保存时自动格式化",结果ESLint和Prettier同时启动,一个要加空格,一个要删空格,代码来回跳。
正确做法是:只让Prettier在保存时自动格式化。ESLint只在提交前检查,或者手动运行。
具体在VS Code的settings.json里:
{
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"eslint.formatOnSave": false
}
这样保存时Prettier整理格式,提交时ESLint抓逻辑问题,互不干扰。
特殊情况怎么处理
有些场景需要调整策略。
如果项目是TypeScript,建议用@typescript-eslint/parser替换ESLint默认解析器。Prettier不需要额外配置,它原生支持TS。
如果是React项目,ESLint加eslint-plugin-react检查JSX里的逻辑。Prettier会自动格式化JSX的缩进和换行。
如果是多人协作的大型项目,建议在CI/CD里加一个步骤:eslint --max-warnings 0,超过警告数直接拒绝合并。Prettier用--check参数只检查不修改,确保所有人格式一致。
别被工具绑架
说到底,代码格式化工具是为了减少沟通成本,不是增加负担。
我见过最离谱的案例:一个团队花了三周时间争论用2空格还是4空格,最后决定用3空格。结果Prettier根本不支持3空格缩进,又吵了一周。
工具是服务人的。2024年的最佳选择不是二选一,而是让ESLint和Prettier各管各的。一个保质量,一个保整洁,加起来才是好代码。
如果你还在纠结,直接按上面的方案配置。半小时搞定,剩下的时间好好写代码。