Prettier 和 ESLint:代码质量的左膀右臂

Prettier 管格式,ESLint 管质量——职责不同但配置不当会打架。本文讲清两者分工、冲突解决方案与现代化工作流集成。

最佳实践
Web 构建模块与工具协作插画

两者不是二选一:Prettier 只负责"代码长什么样"(缩进、引号、换行),ESLint 负责"代码对不对"(未用变量、危险模式)。标准搭配:ESLint 跑规则 + Prettier 管格式,用 eslint-config-prettier 关掉 ESLint 的格式规则消除冲突。

职责分界

Prettier ESLint
管什么 格式(美学) 质量(正确性)
例子 单引号 vs 双引号 no-unused-vars
理念 无配置争议(opinionated) 高度可配置

Prettier 的"专断"是特性:终结团队关于格式的所有争论——配置五分钟,争论永远零。

安装与冲突消除

npm install --save-dev prettier eslint eslint-config-prettier
// eslint.config.js(flat config)
{
  "extends": [
    "...其他配置",
    "prettier"   // 最后引入:关掉所有与 Prettier 冲突的格式规则
  ]
}

不要用 eslint-plugin-prettier(把 Prettier 当 ESLint 规则跑)——性能差且错误提示混乱。格式问题交给 Prettier 单独跑。

工作流集成

// package.json
{
  "scripts": {
    "format": "prettier --write .",
    "lint": "eslint ."
  },
  "lint-staged": {
    "*": ["prettier --write"],
    "*.{js,ts}": ["eslint --fix"]
  }
}

保存时编辑器跑 Prettier(VS Code 设置 formatOnSave),提交时 lint-staged 双检查——格式全自动,质量有把关。

性能与新选择

  • ESLint 慢是已知痛点——Oxlint 可做快速补充(见本系列对比文章);
  • Biome 把两者合一(Rust 实现,lint+format 一体)——新项目可评估单工具方案。

常见问题(FAQ)

Q:Prettier 的固执配置能改吗?

有少量选项(printWidth、singleQuote、semi 等)——刻意保持少,这是"停止争论"设计的一部分。接受它的默认值是回报率最高的选择。

Q:老项目接入 Prettier 怎么平滑?

一次性 prettier --write . 全量格式化,单独一个提交(.git-blame-ignore-revs 记录该提交哈希,blame 不被污染)。

Q:TypeScript 项目的特殊配置?

typescript-eslint 提供 TS 规则;Prettier 原生支持 TS。两者组合与 JS 项目无异。


参考文档

本文依据公开文档整理,示例需按项目依赖版本验证;不将文档中的性能描述视为本项目实测结果。

延伸阅读

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台