如何配置 ESLint 和 Prettier 实现代码规范化?_eslint和prettier配置
以下是结合 ESLint 和 Prettier 实现代码规范化的完整配置指南,涵盖核心概念、安装、配置、规则定制及编辑器集成:
一、ESLint 与 Prettier 的分工与协作
- 核心定位差异
- ESLint:静态代码分析工具,检测代码质量、潜在错误及风格问题(如未使用变量、错误语法)。支持自定义规则和自动修复(
--fix
) [2][13][23]。 - Prettier:代码格式化工具,强制统一代码外观(缩进、引号、换行等),不涉及代码逻辑检查 [4][13][23]。
- 协作模式:ESLint 负责逻辑检查,Prettier 负责格式化,通过插件避免规则冲突 [2][84]。
- ESLint:静态代码分析工具,检测代码质量、潜在错误及风格问题(如未使用变量、错误语法)。支持自定义规则和自动修复(
二、安装与基础配置
1.安装依赖包
npm install --save-dev \\ eslint@8.54.0 \\ # ESLint 核心 prettier@3.1.0 \\ # Prettier 核心 eslint-config-prettier@9.0.0 \\ # 关闭 ESLint 与 Prettier 冲突的规则 eslint-plugin-prettier@5.0.0 \\ # 将 Prettier 作为 ESLint 规则运行 @typescript-eslint/parser@latest \\ # TypeScript 解析器(如用 TS) eslint-plugin-react@7.33.2 # React 项目插件(可选)
说明:eslint-config-prettier
禁用 ESLint 的格式化规则,由 Prettier 接管;eslint-plugin-prettier
将 Prettier 整合到 ESLint 流程中 。
2.配置文件创建
.eslintrc.json
(ESLint 配置)
{ \"parser\": \"@typescript-eslint/parser\", // TypeScript 项目需指定 \"extends\": [ \"eslint:recommended\", // ESLint 推荐规则 \"plugin:react/recommended\", // React 规则(可选) \"plugin:prettier/recommended\" // 集成 Prettier(关键!) ], \"rules\": { \"semi\": [\"error\", \"always\"], // 自定义规则示例:强制分号 \"no-console\": \"warn\" // 禁止 console 警告 }}
-
\"plugin:prettier/recommended\"
等价于同时启用eslint-plugin-prettier
和eslint-config-prettier
。 -
.prettierrc
(Prettier 配置)
{ \"semi\": true, // 加分号 \"singleQuote\": true, // 使用单引号 \"tabWidth\": 2, // 缩进 2 空格 \"trailingComma\": \"all\" // 多行对象/数组末尾加逗号}
-
通过此文件覆盖 Prettier 默认规则 。
三、解决规则冲突与风格统一
1.禁用 ESLint 的格式化规则
eslint-config-prettier
自动关闭 ESLint 中与 Prettier 冲突的规则(如 indent
, quotes
),确保 Prettier 独占格式化职责 。
验证:运行
npx eslint --print-config .eslintrc.json | grep prettier
确认冲突规则已关闭。
2.扩展流行风格指南(如 Airbnb)
安装 Airbnb 规则集并集成:
npm install --save-dev eslint-config-airbnb-base
修改 .eslintrc.json
:
\"extends\": [ \"airbnb-base\", // Airbnb 规范 \"plugin:prettier/recommended\"]
-
Airbnb 规则涵盖变量命名、对象声明等最佳实践 。
四、编辑器自动集成(以 VS Code 为例)
1.安装扩展
- ESLint
- Prettier
2.配置 settings.json
{ \"editor.formatOnSave\": true, // 保存时自动格式化 \"editor.defaultFormatter\": \"esbenp.prettier-vscode\", // 默认格式化器 \"eslint.validate\": [\"javascript\", \"typescript\", \"jsx\"], // 检测语言 \"eslint.codeAction.showDocumentation\": { \"enable\": true }, \"[javascript]\": { \"editor.formatOnSave\": false // 由 ESLint 接管格式化 }}
-
说明:关闭 JavaScript 的
formatOnSave
,由eslint-plugin-prettier
在 ESLint 流程中触发格式化 。
3. 项目级配置
创建 .vscode/settings.json
覆盖全局设置,确保团队一致性:
{ \"eslint.workingDirectories\": [\"./src\"], \"prettier.configPath\": \"./.prettierrc\"}
五、自动化流程增强
1.Git Hooks 预检查
使用 Husky + lint-staged 提交前自动检查:
npx husky init && npm install --save-dev lint-staged
配置 package.json
:
\"lint-staged\": { \"*.{js,jsx,ts,tsx}\": [ \"eslint --fix\", // 自动修复 ESLint 错误 \"prettier --write\" // 格式化文件 ]}
2.CI/CD 集成
在构建流程中添加命令:
\"scripts\": { \"lint\": \"eslint . --ext .js,.jsx,.ts,.tsx\", \"format\": \"prettier --check .\"}
-
CI 中运行
npm run lint && npm run format
阻断不规范代码 。
六、常见问题处理
-
规则覆盖优先级
ESLint 规则 >eslint-config-prettier
> Prettier 配置。若 Prettier 未生效,检查是否被 ESLint 规则覆盖 。
-
TypeScript/React 支持
- 安装
@typescript-eslint/eslint-plugin
并配置parserOptions
。 - React 项目启用
eslint-plugin-react-hooks
检查 Hooks 规则 。
- 安装
七、参考配置示例
- ESLint + Prettier + Airbnb
Airbnb 风格指南 + Prettier 集成方案 。 - 定制规则包
可封装统一配置包(如@company/eslint-config
)供团队复用。
通过以上步骤,可实现从代码编辑到提交的自动化规范化流程,兼顾质量检查与风格统一,显著提升团队协作效率。