3、代码格式化利器:Prettier的安装与配置、与编辑器的集成、团队统一格式化策略
说实话,代码格式化这件事,我见过太多团队吵得不可开交了。
有人喜欢双引号,有人偏要单引号。有人觉得分号必须加,有人觉得不加更清爽。你想想看,每天Code Review的时候,一半时间都在争论这些鸡毛蒜皮的事,多浪费啊。
Prettier就是来解决这个问题的。它是个「固执己见」的格式化工具,说白了就是——你别跟我争,听我的就行。
3.1 为什么非得用Prettier?
我记得刚带团队那会儿,有个项目组因为缩进风格吵了整整两周。最后怎么解决的?我直接拍板:所有人必须用Prettier,格式化规则写进配置文件,谁也别想改。
Prettier的核心价值就三点:
- 统一风格:不管你怎么写,保存文件后自动变成团队统一的格式
- 消除争议:代码风格不再需要人工讨论,机器说了算
- 节省时间:开发者不用再手动调整缩进、空格、换行
核心观点:Prettier不是帮你「写好代码」,而是帮你「写得一致」。这两者有本质区别。
3.2 安装Prettier
安装方式有两种,我个人建议用项目级安装,而不是全局安装。为什么?因为每个项目的格式化规则可能不一样,全局安装容易出问题。
方式一:项目级安装(推荐)
# 使用 npm
npm install --save-dev prettier
# 使用 yarn
yarn add --dev prettier
# 使用 pnpm
pnpm add --save-dev prettier
方式二:全局安装
npm install -g prettier
注意:全局安装虽然方便,但不同项目可能依赖不同版本的Prettier。我曾经踩过这个坑——全局版本和项目版本不一致,导致格式化结果不同,排查了半天才发现是版本问题。
3.3 配置文件怎么写?
Prettier支持多种配置文件格式。我个人习惯用 .prettierrc,因为它最简洁,也最直观。
常见的配置项
| 配置项 | 默认值 | 说明 |
|---|---|---|
printWidth |
80 | 每行最大字符数,超过则换行 |
tabWidth |
2 | 缩进使用的空格数 |
useTabs |
false | 是否使用Tab缩进,建议用空格 |
semi |
true | 是否在语句末尾加分号 |
singleQuote |
false | 是否使用单引号 |
trailingComma |
"es5" | 多行时是否添加尾逗号 |
bracketSpacing |
true | 对象字面量中括号间是否加空格 |
arrowParens |
"always" | 箭头函数参数是否加括号 |
一个典型的配置文件
{
"printWidth": 100,
"tabWidth": 2,
"useTabs": false,
"semi": true,
"singleQuote": true,
"trailingComma": "all",
"bracketSpacing": true,
"arrowParens": "always",
"endOfLine": "lf"
}
小技巧:endOfLine 这个配置很多人会忽略。Windows和Mac的换行符不一样,如果不统一,Git提交时会看到一堆「换行符变更」的提示。我建议统一设为 "lf"。
3.4 与编辑器集成
光有配置文件还不够,你得让编辑器在保存文件时自动调用Prettier。这才是真正的「无感格式化」。
VS Code集成
- 安装插件:搜索「Prettier - Code formatter」并安装
- 设置默认格式化器:在设置中搜索
editor.defaultFormatter,选择esbenp.prettier-vscode - 开启保存时格式化:设置
editor.formatOnSave为true
// VS Code settings.json 配置示例
{
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true,
"[javascript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[typescript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[json]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
}
}
WebStorm集成
- 打开设置 → Languages & Frameworks → JavaScript → Prettier
- 选择Prettier包路径(通常是项目中的
node_modules/prettier) - 勾选「On save」自动格式化
注意:WebStorm默认的快捷键和Prettier可能有冲突。我建议在设置中把「Reformat Code」的快捷键改成和Prettier一致,避免混淆。
3.5 团队统一格式化策略
工具装好了,配置写好了,怎么让整个团队都用起来?这才是真正的难点。
第一步:配置文件纳入版本控制
把 .prettierrc 和 .prettierignore 提交到Git仓库。这样每个成员拉取代码后,自动获得统一的格式化规则。
# .prettierignore 示例
node_modules
dist
build
coverage
*.min.js
*.map
第二步:集成到CI/CD流程
在CI中增加Prettier检查步骤,如果代码格式不符合规范,构建直接失败。
// package.json 中添加脚本
{
"scripts": {
"format": "prettier --write \"src/**/*.{js,ts,json,css,md}\"",
"format:check": "prettier --check \"src/**/*.{js,ts,json,css,md}\""
}
}
第三步:配合Git Hooks
使用 husky 和 lint-staged,在提交代码前自动格式化。
// 安装依赖
npm install --save-dev husky lint-staged
// package.json 配置
{
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
},
"lint-staged": {
"*.{js,ts,json,css,md}": ["prettier --write", "git add"]
}
}
最佳实践:我建议把Prettier和ESLint配合使用。Prettier负责代码格式,ESLint负责代码质量。两者分工明确,互不干扰。
3.6 避坑指南
嗯,这里要说说我踩过的几个坑,希望能帮你少走弯路。
- 不要和ESLint冲突:如果同时使用ESLint和Prettier,记得安装
eslint-config-prettier,关闭ESLint中与Prettier冲突的规则。 - 版本要统一:团队所有成员必须使用相同版本的Prettier。我曾经遇到过有人用2.0,有人用1.8,格式化结果不一样,排查了半天。
- 不要过度配置:Prettier的设计理念就是「少配置」。你改得越多,越容易出问题。我一般只改
printWidth、singleQuote、trailingComma这三个。 - 大项目要分批格式化:如果项目已经运行了很久,代码风格不统一,不要一次性格式化所有文件。否则Git历史会变得一团糟。我建议分批处理,每次只格式化一个模块。
最后说一句:Prettier不是银弹。它解决的是「格式统一」的问题,解决不了「代码质量」的问题。但话说回来,格式统一了,团队协作的效率至少能提升30%。这笔账,怎么算都划算。
好了,这一章就到这里。下一章我们聊聊ESLint——那个真正帮你「写好代码」的工具。