ESLint 与 Prettier 集成配置与规则冲突解决
请说明如何配置 ESLint 和 Prettier 在项目中协同工作,以及如何处理两者之间的规则冲突(如 indent、quotes、semi)。
回答
屠龙少年
ESLint vs Prettier 分工:
- ESLint:代码质量规则(未使用变量、空判断、潜在 bug)
- Prettier:代码格式化规则(缩进、引号、分号、换行)
集成配置:
1. 安装依赖:
npm install -D eslint prettier eslint-config-prettier eslint-plugin-prettier
2. eslint-config-prettier:关闭所有可能与 Prettier 冲突的 ESLint 规则
// .eslintrc.js
module.exports = {
extends: [
'eslint:recommended',
'plugin:@typescript-eslint/recommended',
'prettier', // 必须放在最后,覆盖前面可能冲突的规则
],
plugins: ['prettier'],
rules: {
'prettier/prettier': 'error', // 将 Prettier 差异报告为 ESLint 错误
},
};
3. 或者使用 eslint-plugin-prettier(一体化):
module.exports = {
plugins: ['prettier'],
rules: {
'prettier/prettier': ['error', {
singleQuote: true,
semi: true,
tabWidth: 2,
trailingComma: 'all',
printWidth: 100,
}],
},
};
4. .prettierrc 配置:
{
"singleQuote": true,
"semi": true,
"tabWidth": 2,
"trailingComma": "all",
"printWidth": 100,
"endOfLine": "lf"
}
解决冲突的通用规则:
- 优先在 .prettierrc 中配置格式(如 singleQuote: true)
- ESLint 中不配置格式化规则(依赖 eslint-config-prettier 关闭)
- 使用
eslint --fix同时修复质量和格式问题 - VSCode 中配置
editor.formatOnSave: true+editor.codeActionsOnSave: { "source.fixAll.eslint": true }