Prettier和ESLint必须共存:Prettier负责代码格式化(缩进、引号、换行),ESLint负责质量检查与报错(未定义变量、console漏删等),二者分工明确,缺一不可。

VS Code里Prettier和ESLint不是二选一,而是必须共存
单独装Prettier只能调格式(比如缩进、引号、换行),但不会报错;单独用ESLint能报错(比如变量未定义、console.log漏删),但默认不格式化代码。真实项目里两者缺一不可:ESLint管“对不对”,Prettier管“好不好看”。
配置冲突最常卡在editor.formatOnSave和eslint.codeActionsOnSave
很多人配完发现保存没反应,或者格式乱套,基本是这两个开关打架:
-
editor.formatOnSave设为true时,VS Code会调用当前语言的默认格式化器(比如esbenp.prettier-vscode),但它不管ESLint规则 -
eslint.codeActionsOnSave必须显式启用"source.fixAll.eslint",否则ESLint的自动修复(比如加;、改引号)根本不会触发 - 如果同时开了
prettier.eslintIntegration(旧版配置),又没装eslint-plugin-prettier,ESLint会直接报Definition for rule 'prettier/prettier' was not found
正确做法是:关掉prettier.eslintIntegration(已废弃),改用eslint-plugin-prettier把Prettier规则塞进ESLint检查流里。
Vue/React项目要额外处理files.associations和语言特定配置
VS Code默认不把.vue或.jsx文件识别为JavaScript,导致ESLint不校验、Prettier不生效:
- 必须在
.vscode/settings.json里加"files.associations": {"*.vue": "vue", "*.jsx": "javascriptreact"} - 针对
vue语言块,要单独指定格式化器:"[vue]": {"editor.defaultFormatter": "esbenp.prettier-vscode"} - 如果用了Vetur,记得关掉它的格式化:
"vetur.format.enable": false,否则和Prettier抢着格式化<template>部分
不配这些,你改了.eslintrc.js里的quotes规则,保存.vue文件时依然用双引号——因为ESLint根本没扫描它。
.prettierrc和.eslintrc.js的规则必须对齐,尤其semi、singleQuote、trailingComma
Prettier自己有一套默认风格,ESLint也有自己的偏好。比如Prettier默认semi: true(强制加分号),但Airbnb规则是semi: "off"。两者不一致,保存时就会反复横跳:
- 先被Prettier加了分号 → ESLint报错“不该加分号” → 自动修复删掉 → Prettier又加回来
- 解决方法是让ESLint接管全部风格控制:在
.eslintrc.js的extends里加入"plugin:prettier/recommended",它会禁用所有和Prettier冲突的ESLint规则 -
.prettierrc里只留真正需要覆盖默认的项,比如"printWidth": 100,别写一堆和ESLint重复的quotes、semi
最易忽略的是trailingComma:Prettier默认"es5",ESLint的comma-dangle规则却可能设成"always",结果对象末尾逗号一会儿有一会儿没——这种细节不手动对齐,团队协作时Git diff全是格式噪音。


















