ESLint 与 Prettier 的冲突终结方案

举报
yd_264617019 发表于 2026/11/08 10:40:05 2026/11/08
【摘要】 保存文件时Prettier刚格式化完,ESLint又画满红线,「格式化器与linter打架」是新人配环境的头号拦路虎。这篇给出目前公认的最稳配置,讲清每个包为什么存在。先理解冲突根源:ESLint的部分规则(如缩进、引号)管「格式」,Prettier也管格式,两边标准不一致时,满足一个必然违反另一个。方案的核心是三个包。eslint-config-prettier:关闭ESLint里所有和P...

保存文件时 Prettier 刚格式化完,ESLint 又画满红线,「格式化器与 linter 打架」是新人配环境的头号拦路虎。这篇给出目前公认的最稳配置,讲清每个包为什么存在。

先理解冲突根源:ESLint 的部分规则(如缩进、引号)管「格式」,Prettier 也管格式,两边标准不一致时,满足一个必然违反另一个。

方案的核心是三个包。eslint-config-prettier:关闭 ESLint 里所有和 Prettier 冲突的格式规则,让格式权完全归 Prettier。eslint-plugin-prettier:把 Prettier 的输出作为 ESLint 规则运行,统一在一个命令里跑。

以 ESLint 9 的扁平配置为例:

// eslint.config.js
import js from '@eslint/js'
import prettierConfig from 'eslint-config-prettier' // 必须放最后
import prettierPlugin from 'eslint-plugin-prettier'

export default [
  js.configs.recommended,
  {
    plugins: { prettier: prettierPlugin },
    rules: {
      'prettier/prettier': 'error', // 格式问题走 ESLint 报出
    },
  },
  prettierConfig, // 关键:放在数组最后,覆盖前面的格式规则
]

配置顺序是第一个易错点:eslint-config-prettier 必须最后引入,它的工作方式是「关闭前面的格式规则」,放前面会被后引入的 recommended 重新打开。

.prettierrc 只留真正想定制的:

{
  "semi": false,
  "singleQuote": true,
  "printWidth": 100,
  "trailingComma": "all"
}

编辑器层两件事:VSCode 装 ESLint 和 Prettier 扩展;settings.json 设定 Prettier 为默认格式化器并开保存格式化:

{
  "editor.defaultFormatter": "esbenp.prettier-vscode",
  "editor.formatOnSave": true,
  "editor.codeActionsOnSave": {
    "source.fixAll.eslint": "explicit"
  }
}

这样保存的动作链是:Prettier 先格式化 → ESLint 修可修的代码质量问题 → 剩余问题标红。

方案 B(更简,现在更推荐):两个工具各司其职。Prettier 只在编辑器和 pre-commit 跑,ESLint 不碰格式(只装 eslint-config-prettier、不装 plugin)。package.json 里分开两个命令,CI 各查各的。少了插件胶水,速度快一点,心智也更清楚。

最后一个高频问题:团队里格式总是「来回横跳」。根因是有人本地有 .prettierrc 之外的自定义(编辑器全局配置)。解法是把 .editorconfig 一起进库(管缩进、换行符),pre-commit 用 lint-staged 强制格式化,个人习惯无法污染仓库。配完这一套,格式争议彻底退出 review 留言区。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。