在线工具集

代码格式化终极指南:HTML/CSS/SQL/JS 美化与团队规范

各语言的主流格式化工具(Prettier/HTMLHint/sql-formatter)、配置文件、pre-commit hook 强制规范、CI 中的 lint-staged。本指南讲清楚为什么团队都用 Prettier。

✍️ XTechTools 编辑团队 · 📅 发布 2026-04-29 · 🔄 更新 2026-06-14 · ⏱ 约 8 分钟阅读 ·→ 立即使用 代码格式化

代码在生产环境常被压缩成无空白的一行,难以 review 也难调试。格式化工具把这些紧凑文本重新拆成多行缩进结构,让代码对人类友好。本指南从各语言的主流工具(Prettier/HTMLHint/sql-formatter/JS-Beautify)、配置文件、pre-commit hook 强制规范、团队 CI 集成讲清楚 code formatting 的全部考量。

为什么需要代码格式化工具

IDE 虽然有右键「格式化代码」,但每个开发者的按键习惯不同: - 缩进用 2 空格还是 4 空格还是 Tab? - 行尾要不要加分号? - 花括号下一行还是同行? - 数组/对象最后一个元素后面要不要逗号?

团队没有统一规范,就会出现:每个人一个风格,commit 历史里全是格式变化,PR review 反而在纠缠格式而不是逻辑。格式化工具的目的就是消除这些人为选择,让所有代码机械地落成同一个模样。

Prettier 为什么最流行:它采取"零配置哲学"——有既定的格式规则,你很少需要改配置,团队所有成员装上同一版本就能保证格式一致。

主流格式化工具对照

  • Prettier(JavaScript/TypeScript/JSX/JSON):最流行,简化主义配置,广泛社区支持
  • HTMLHint(HTML):专注 HTML 校验与格式化,可检测语义错误
  • sql-formatter(SQL):支持 11 种 SQL 方言(MySQL/PostgreSQL/SQLServer 等),关键字大小写与缩进自定义
  • Beautify(JavaScript/JSON):Web 版,支持多语言美化,但配置项复杂
  • Black(Python):Python 社区事实标准,集成 pre-commit 无缝
  • gofmt(Go):内置官方工具,Go 生态强制使用
  • rustfmt(Rust):Rust 官方格式化,cargo fmt 一键

本工具整合 Prettier + HTMLHint + sql-formatter + Beautify,支持切换语言与配置参数。

配置文件与常见参数

Prettier 配置.prettierrcpackage.json"prettier" 字段): `` { "printWidth": 80, // 单行最大字符数 "tabWidth": 2, // 缩进宽度 "useTabs": false, // 用 Tab 还是空格 "semi": true, // 行尾是否加分号 "singleQuote": false, // 用单引号还是双引号 "trailingComma": "es5" // 末尾逗号:none / es5 / all } ``

SQL 格式化参数: - 关键字大小写:UPPERCASE / lowercase / PRESERVE - 缩进宽度:通常 2 或 4 - 逗号位置:leading(,col) 或 trailing(col,

团队推荐:Prettier 用官方默认配置,不要过度自定义。同时装上 .prettierignore 排除 node_modules、dist 等目录。

Pre-commit Hook:强制规范

配置了格式化工具还不够,需要在 git commit 时强制检查。用 husky + lint-staged 是业界标配:

  1. 装 husky:npm install husky --save-dev && npx husky install
  2. 装 lint-staged:npm install lint-staged --save-dev
  3. .husky/pre-commit 文件:
  4. package.json 加配置:

流程:开发者 git add → git commit 时,husky 自动跑 lint-staged → 只对本次改动的文件格式化 → 格式化成功才 commit 成功。违反规范的提交直接被卡住。

CI 中的格式化检查

为了更严格的质量门槛,在 CI pipeline 中加格式化校验(仅报告,不自动修复):

GitHub Actions 示例: ``yaml name: Format Check on: [pull_request] jobs: format: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v2 - run: npm install - run: npx prettier --check "src/*/.{js,jsx,ts,tsx}" - run: npm run lint:sql ``

如果 PR 中有格式不达标的代码,CI check fail,PR merge 被卡住。团队必须本地跑 prettier --write 修复后再 push。这样保证了 main 分支永远格式统一。

格式化 vs Lint:概念区分

很多人混淆这两个:

  • Lint(如 ESLint/Pylint):查找逻辑错误风格问题(如未定义变量、 unused 变量、复杂度超标)。输出警告 / 错误
  • 格式化(Prettier/gofmt):调整空白与符号(缩进、换行、引号)。改变代码视觉表现但不改逻辑
  1. 先格式化(prettier --write)让代码统一好看
  2. 再 lint(eslint)检查逻辑问题
  3. 在 pre-commit 两个都跑,但格式化自动修复(--write),lint 只报告(--fix 也可以)

空格 vs Tab 之争终结者

程序员的"圣战"之一: - 空格派:可见字符,在所有编辑器宽度一致,缩进嵌套清晰,是当代主流(90% 项目用空格) - Tab 派:只占 1 字符位置,文件体积小,屏幕宽度用户可控

现实情况: - Python 强制缩进,但允许 space 或 tab(混用会报错) - JavaScript/Go/Rust 生态默认空格 - Rust/Go 官方工具默认 Tab(rustfmt / gofmt) - 大多数公司标准 2-4 空格

建议:团队选定一种后在 .editorconfig 或 .prettierrc 锁定,不要再改。Prettier 的默认 2 空格对新手友好。

常见问题

代码格式化会改变代码逻辑吗?

不会。格式化只改变空白、换行、引号等表面风格,不改变 AST(抽象语法树),代码行为完全相同。

我不喜欢 Prettier 的默认配置怎么办?

可以改 .prettierrc,但不建议过度自定义。团队代码检查通常采用 Prettier 官方推荐配置,个人改了也会在 lint-staged 被覆盖。

格式化后代码变丑了怎么办?

短期内可能不习惯,但 1-2 周后就会适应。好处是团队所有人代码看起来一样,review 时专注逻辑不纠缠格式。

大型存量项目怎么一次性格式化?

分步走:1) 在新分支跑 prettier --write 全项目,2) 创建 PR,3) 之后再改代码时用 pre-commit hook 维护格式。一步到位改全量容易产生巨大 diff。

格式化工具对性能有影响吗?

本地开发影响微乎其微(毫秒级)。但 CI 中大项目跑 prettier + eslint 可能需要几秒,可用缓存优化。