5月27日 22:03
Prettier 如何在团队协作中发挥作用?有哪些最佳实践?
核心答案
Prettier 的团队协作价值是用机器执行替代人工争论,分三个层次落地:
- 配置即合约:
.prettierrc提交到版本控制,团队共享格式规则 - 提交即格式化:Husky + lint-staged 在 pre-commit 自动处理,开发者无感知
- 合并即拦截:CI 中
prettier --check失败则阻断 PR
核心原则:Prettier 管格式(缩进、换行、引号),ESLint 管质量,各司其职。
配置与编辑器
.prettierrc 是团队格式规范的单点真相:
json{ "semi": true, "singleQuote": true, "tabWidth": 2, "trailingComma": "es5", "printWidth": 80, "endOfLine": "lf" }
endOfLine: "lf" 容易被忽略——Windows 默认 CRLF,混用会产生 Git diff 噪音。编辑器侧用 .vscode/settings.json 配合保存即格式化:
json{ "editor.defaultFormatter": "esbenp.prettier-vscode", "editor.formatOnSave": true }
工作流集成
Pre-commit 自动格式化(只处理暂存文件):
bashnpm install --save-dev husky lint-staged npx husky add .husky/pre-commit "npx lint-staged"
json{ "lint-staged": { "*.{js,ts,tsx,json,css,md}": ["prettier --write"] } }
CI 兜底检查(防止绕过 hooks 提交):
yaml- name: Check format run: npx prettier --check "src/**/*.{js,ts,tsx}"
与 ESLint 协作
两者冲突是落地最常见的障碍。用 eslint-config-prettier 关闭 ESLint 中与 Prettier 重叠的格式规则:
bashnpm install --save-dev eslint-config-prettier
js// .eslintrc.js module.exports = { extends: ["eslint:recommended", "prettier"] // prettier 必须放最后 }
执行顺序:Prettier 先格式化,ESLint 再检查质量,反过来会互相覆盖。
踩坑要点
- 版本锁定:Prettier 2 和 3 格式化结果不同,必须锁版本
- 历史代码:单独 PR 执行
prettier --write,混入业务变更会导致 git blame 失效 - Monorepo:根目录放配置,子包通过
"prettier": "../.prettierrc"引用,防止配置漂移 - 性能:
.prettierignore排除 dist/node_modules,Prettier 3 支持--cache增量处理
追问
- Prettier "不妥协的格式化"在什么场景下反而降低效率?如何应对?
- Prettier 3 的破坏性变更如何平滑升级?
- 团队成员坚持用自己偏好的格式,配置如何平衡灵活性和一致性?