本文目录导读:

- 通用方案:使用
prettier(前端/全栈/通用) - 通用方案:使用
clang-format(C/C++/Java/Objective-C) - 团队协作最佳实践:Git Hooks + lint-staged
- 针对 Python 的格式化脚本(使用 black + isort)
- 一键格式化所有常见语言(通用脚本)
- 重要提示(建议)
是的,实用脚本完全可以自动格式化代码,而且这是开发中非常常见且高效的做法,通过脚本自动格式化代码,可以确保团队代码风格一致、减少人工审查的琐碎工作、避免因格式问题导致的合并冲突。
下面我为你介绍几种不同场景下的实用脚本方案:
通用方案:使用 prettier (前端/全栈/通用)
prettier 是目前最流行的代码格式化工具,支持 JavaScript、TypeScript、CSS、HTML、JSON、Markdown 等多种语言。
脚本示例(前提 npm 环境):
在项目根目录创建 format.js 或直接在 package.json 的 scripts 中配置:
// package.json
{
"name": "my-project",
"scripts": {
"format": "prettier --write \"src/**/*.{js,ts,json,css,md}\"",
"format:check": "prettier --check \"src/**/*.{js,ts,json,css,md}\""
},
"devDependencies": {
"prettier": "^3.0.0"
}
}
然后运行:
npm run format # 自动格式化所有指定文件 npm run format:check # 只检查格式,不修改(常用于 CI 验证)
优势:
- 支持语言多
- 配置简单(.prettierrc)
- 与编辑器集成良好(保存即格式化)
通用方案:使用 clang-format (C/C++/Java/Objective-C)
适合 C/C++/Java/Objective-C 等项目。
脚本示例(Linux/macOS):
#!/bin/bash
# format_code.sh
# 递归格式化当前目录下所有 .c, .h, .cpp, .hpp 文件
find . \( -name "*.cpp" -o -name "*.h" -o -name "*.c" -o -name "*.hpp" \) \
-exec clang-format -i --style=file {} +
保存为 format_code.sh,运行方式:
chmod +x format_code.sh ./format_code.sh
配置文件示例(.clang-format):
BasedOnStyle: Google # 或 LLVM, Chromium, Mozilla 等 IndentWidth: 2 UseTab: Never
团队协作最佳实践:Git Hooks + lint-staged
自动格式化放在 提交代码前,避免未格式化的代码进入仓库,推荐使用 husky + lint-staged 组合。
步骤:
-
安装依赖
npm install --save-dev husky lint-staged
-
配置
package.json:
{
"scripts": {
"prepare": "husky install"
},
"lint-staged": {
"*.{js,ts,jsx,tsx,vue}": ["prettier --write", "eslint --fix"],
"*.{css,scss,less}": ["prettier --write"],
"*.{json,md,yaml}": ["prettier --write"]
}
}
设置 pre-commit 钩子:
npx husky add .husky/pre-commit "npx lint-staged"
效果:
每次执行 git commit 前,脚本会自动格式化所有被暂存的文件,然后才提交,如果格式化失败,提交会被阻止。
针对 Python 的格式化脚本(使用 black + isort)
# format_python.py
import subprocess
import sys
def format_code():
"""使用 black 和 isort 自动格式化 Python 代码"""
try:
# isort:排序并格式化 import 语句
subprocess.run(["isort", "."], check=True)
# black:格式化所有 Python 文件
subprocess.run(["black", "."], check=True)
print("✅ 代码格式化完成!")
except subprocess.CalledProcessError as e:
print(f"❌ 格式化过程中出错: {e}")
sys.exit(1)
if __name__ == "__main__":
format_code()
运行:
python format_python.py
或者集成到 Makefile 中(适合 Linux 类项目):
# Makefile
.PHONY: format
format:
@echo "Running black and isort..."
@black --quiet .
@isort --quiet .
运行:
make format
一键格式化所有常见语言(通用脚本)
如果你想要一个能处理多种语言的通用脚本(.sh 或 .bat),可以参考下面这个:
Linux/macOS(format_all.sh):
#!/bin/bash
# 自动检测并使用合适的格式化工具
echo "🔍 正在检查项目文件类型并格式化..."
# 前端文件
if command -v prettier &> /dev/null; then
prettier --write "**/*.{js,ts,json,css,md,yaml,yml}" 2>/dev/null || true
fi
# 前端文件(有硬编码前端文件的话)
if [ -d "src" ]; then
clang-format -i src/**/*.{cpp,h,cc} 2>/dev/null || true
fi
# Python 文件
if command -v black &> /dev/null; then
black --quiet . 2>/dev/null || true
fi
# Java 文件(如果安装了 google-java-format)
if command -v google-java-format &> /dev/null; then
find . -name "*.java" -exec google-java-format -i {} \; 2>/dev/null || true
fi
echo "✅ 格式化完成!"
Windows(format_all.bat):
@echo off
echo 正在自动格式化代码...
if exist node_modules\.bin\prettier.cmd (
call npx prettier --write "src/**/*.{js,ts,json,css,md}"
) else (
echo prettier 未安装,跳过。
)
if exist venv\Scripts\activate (
call black --quiet .
) else (
echo black 未安装,跳过。
)
echo 格式化完成!
pause
重要提示(建议)
- 不要格式化第三方库代码:脚本中要排除
node_modules/、venv/、build/、dist/、vendor/等目录,通常格式化工具默认会忽略.gitignore中的路径。 - 在 CI/CD 中使用 format:check:在 CI 流水线中,不要使用
--write修改代码,而是用--check参数,如果格式不对则让流水线失败,这样可以强制保证提交的代码符合规范。 - 统一团队配置:将配置文件(如
.prettierrc、.editorconfig、.clang-format)提交到版本控制中,确保所有成员使用相同的规则。 - 与编辑器集成:建议团队成员在编辑器中开启“保存时自动格式化”功能,这样可以在编码阶段就解决格式问题,减少后期脚本运行的次数。
是的,通过脚本自动格式化代码不仅可行,而且是专业开发团队的标配,选择哪种方案取决于你的项目语言和技术栈:
- 现代 JavaScript/TypeScript 项目:
prettier+husky+lint-staged是最佳组合。 - C/C++/Java 项目:
clang-format+ 项目根目录.clang-format配置文件。 - Python 项目:
black+isort+pre-commithooks。 - 多语言项目:可以写一个通用的脚本,按需调用不同的格式化工具。
如需针对你的具体项目(语言、框架、环境)给出更精确的脚本,可以提供更多细节,我可以帮你定制。