一份实用避坑指南
目录导读

- 为什么需要格式化工具?
- 主流开源格式化工具对比
- Prettier 配置详解:.prettierrc 全字段解析
- ESLint + Prettier 协同配置实战
- EditorConfig 统一跨编辑器格式化
- 常见配置错误与解决方案
- 问答环节:读者最关心的5个配置问题
为什么需要格式化工具?
在多人协作项目中,代码风格差异常导致 Git 冲突和代码审查效率低下。开源格式化工具通过自动化规则强制统一缩进、引号、换行等细节,将开发者的注意力从“代码长得像谁写的”转移到“逻辑是否正确”,据统计,引入格式化工具后,团队代码审查时间平均减少 37%。
主流开源格式化工具对比
当前最常用的三款工具各有侧重:
| 工具 | 适用语言 | 配置方式 | 特性亮点 |
|---|---|---|---|
| Prettier | JS/TS/CSS/JSON/Markdown等 | .prettierrc 或 prettier.config.js |
固执化风格,极少配置项 |
| ESLint | JavaScript/TypeScript | .eslintrc.js 或 eslint.config.js |
既可格式化又可检查逻辑错误 |
| EditorConfig | 跨语言通用 | .editorconfig |
控制缩进、编码等基础设置 |
选择建议:如果项目以 JS/TS 为主,推荐 Prettier + ESLint 组合;若项目包含多种语言且编辑器不统一,先在根目录放一份 .editorconfig 兜底。
Prettier 配置详解:.prettierrc 全字段解析
Prettier 的标志性设计是 “选项少,风格硬”,但仍有几个必须掌握的参数:
// .prettierrc 示例 —— 最精简推荐配置
{
"printWidth": 100, // 单行最大长度,超限自动换行
"tabWidth": 2, // 缩进空格数
"semi": true, // 语句末尾加分号
"singleQuote": true, // 使用单引号
"trailingComma": "all", // 多行对象/数组末尾加逗号
"bracketSpacing": true, // 对象大括号两侧加空格 { foo: bar }
"arrowParens": "always" // 箭头函数参数始终加括号 (x) => x
}
实战陷阱:printWidth 设置过高(如 120)会导致在宽屏显示时代码过长,影响阅读;建议团队约定在 80-100 之间。trailingComma: "all" 在旧版 Node.js 中可能报错,需确认项目运行环境。
配置 Prettier 的三种方式(优先级从高到低):
- 项目根目录的
.prettierrc文件 package.json中的prettier字段- 默认值或不配置(使用 Prettier 内置规则)
ESLint + Prettier 协同配置实战
直接同时使用 ESLint 和 Prettier 会引发冲突(比如一个要求分号,另一个删除分号),正确做法是使用 eslint-config-prettier:
npm install --save-dev eslint prettier eslint-config-prettier
然后修改 .eslintrc.js:
module.exports = {
extends: [
"eslint:recommended",
"prettier" // 放在最后,关闭与 Prettier 冲突的规则
],
rules: {
"no-console": "warn" // 设置 ESLint 独有的规则
}
};
关键点:prettier 配置必须放在 extends 数组的最后一项,否则它无法覆盖前面的格式化规则。
EditorConfig 统一跨编辑器格式化
即便项目配置了 Prettier,不同编辑器(VS Code、WebStorm、Sublime)的默认行为仍可能不一致。.editorconfig 文件能在更深层次统一基础设置:
# .editorconfig —— 放在项目根目录
root = true
[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.md]
trim_trailing_whitespace = false # Markdown 文件保留尾部空格
注意:EditorConfig 只控制缩进、编码等基础属性,无法替代 Prettier 的代码格式调整,建议同时使用两者:EditorConfig 打基础,Prettier 做精细化格式化。
常见配置错误与解决方案
错误1:配置了但格式化没生效
- 检查是否安装了对应的编辑器插件(VS Code 需安装 Prettier 扩展)
- 确认编辑器设置是否关闭了“粘贴自动格式化”或“保存时自动格式化”为 Prettier 以外的工具
错误2:git commit 时自动格式化失败
- 安装
husky和lint-staged到项目:npm install --save-dev husky lint-staged
在
package.json中添加:"lint-staged": { "*.{js,jsx,ts,tsx,json,css,scss,md}": ["prettier --write"] }
错误3:格式化后代码行距异常
- 检查
.prettierrc中是否有冲突参数,例如同时设置了tabWidth: 4和useTabs: true,建议只设置其中一种缩进方式。
问答环节:读者最关心的5个配置问题
Q1:项目中有老代码,如何让 Prettier 只格式化新写的文件?
A:创建 .prettierignore 文件(类似 .gitignore),将旧代码目录加入排除列表:
dist/
legacy/
*.min.js
Q2:团队成员必须用同一个编辑器吗?
A:不需要,只要在项目根目录放好 .prettierrc 和 .editorconfig,并确保每个人安装了对应编辑器插件,VS Code、WebStorm、Vim 等都能统一格式化。
Q3:配置完成后,如何一键格式化整个项目?
A:在 package.json 的 scripts 中添加:
"format": "prettier --write ."
运行 npm run format 即可,注意这会扫描所有文件,第一次执行前确认 prettierignore 已正确配置。
Q4:Prettier 和 ESLint 冲突时,应该信哪个?
A:以 Prettier 为准,ESLint 用于逻辑检查(如禁止 var),Prettier 负责风格统一,通过 eslint-config-prettier 关闭 ESLint 中与格式化相关的规则。
Q5:YAML 文件能用 Prettier 格式化吗?
A:可以,Prettier 从 2.0 版本开始支持 YAML(文件扩展名 .yml 或 .yaml),配置方式相同,但注意 YAML 对缩进敏感,建议 tabWidth: 2。
配置三步走,彻底解放双手
- 项目根目录放
.editorconfig—— 统一缩进、编码、换行符 - 安装 Prettier + ESLint,创建
.prettierrc和.eslintrc.js(配合eslint-config-prettier) - 设置
husky+lint-staged—— 在git commit时自动格式化变更文件
完成这三步后,团队任何成员在保存文件或提交代码时,格式都会被自动化统一,建议将配置文件和命令说明写入项目 README 文档,帮助新成员快速上手。