本文目录导读:

使用 Prettier(最推荐)
安装和配置
# 安装 Prettier
npm install -g prettier
# 创建配置文件 .prettierrc
{
"semi": true,
"singleQuote": true,
"tabWidth": 2,
"trailingComma": "es5",
"printWidth": 100
}
批量格式化
# 格式化所有 JS/TS 文件
prettier --write "src/**/*.{js,jsx,ts,tsx}"
# 格式化多种类型文件
prettier --write "src/**/*.{js,json,css,md}"
ESLint 自动修复
# 安装 ESLint npm install -g eslint # 运行自动修复 eslint --fix "src/**/*.js" # 结合 prettier eslint --fix --ext .js,.jsx,.ts,.tsx src/
针对特定语言的工具
Python (Black)
# 安装 Black pip install black # 批量格式化 black src/ black --line-length 100 src/**/*.py
Go (gofmt)
# 格式化所有 Go 文件 gofmt -w . gofmt -l . # 列出需要格式化的文件
Java (Google Java Format)
# 批量格式化 java -jar google-java-format-1.15.0-all-deps.jar -r src/**/*.java
自定义脚本方案
Python 脚本示例
import os
import re
from pathlib import Path
def format_python_files(root_dir):
"""批量格式化 Python 文件"""
for path in Path(root_dir).rglob("*.py"):
with open(path, 'r') as f:
content = f.read()
# 自定义格式规则
# 1. 移除多余空行
content = re.sub(r'\n{3,}', '\n\n', content)
# 2. 统一缩进为4空格
content = re.sub(r'^ ', '\t', content, flags=re.MULTILINE)
# 3. 确保文件末尾有换行
content = content.rstrip() + '\n'
with open(path, 'w') as f:
f.write(content)
# 使用
format_python_files("./src")
Shell 脚本示例
#!/bin/bash
# batch_format.sh
# 格式配置
EXTENSIONS=("*.js" "*.jsx" "*.ts" "*.tsx")
ROOT_DIR="$1"
if [ -z "$ROOT_DIR" ]; then
ROOT_DIR="."
fi
format_file() {
local file="$1"
echo "格式化工��: $file"
# 自定义格式化逻辑
# 移除尾部空白
sed -i 's/[[:space:]]*$//' "$file"
# 确保文件末尾有换行
sed -i -e '$a\' "$file"
}
# 遍历文件
for ext in "${EXTENSIONS[@]}"; do
find "$ROOT_DIR" -type f -name "$ext" | while read file; do
format_file "$file"
done
done
echo "格式化完成!"
使用强大的 sed 命令
# 移除尾部空白
find . -name "*.py" -exec sed -i 's/[[:space:]]*$//' {} \;
# 统一换行符 (CRLF -> LF)
find . -type f \( -name "*.js" -o -name "*.py" \) -exec dos2unix {} \;
# 转换缩进 (4空格 -> 2空格)
find . -name "*.js" -exec sed -i 's/ / /g' {} \;
项目级自动化配置
创建格式化脚本 format.sh
#!/bin/bash
set -e
echo "===== 开始代码格式化 ====="
# 检查工具是否存在
command -v prettier >/dev/null 2>&1 || { echo "需要安装 prettier"; exit 1; }
# 运行格式化
prettier --write "src/**/*.{js,ts,jsx,tsx,json,css,scss,md}" --log-level warn
# 运行 ESLint 修复
npx eslint --fix "src/**/*.{js,ts,jsx,tsx}" --quiet
echo "===== 格式化完成! ====="
package.json 配置
{
"scripts": {
"format": "bash format.sh",
"format:check": "prettier --check \"src/**/*.{js,ts}\"",
"format:write": "prettier --write \"src/**/*.{js,ts}\""
}
}
Git Hooks 自动化
pre-commit hook
#!/bin/bash
# .git/hooks/pre-commit
# 暂存区文件格式化
FILES=$(git diff --cached --name-only --diff-filter=ACM)
if [ -n "$FILES" ]; then
echo "格式化暂存的文件..."
# 对暂存文件运行格式化
for FILE in $FILES; do
if [[ $FILE == *.js || $FILE == *.ts ]]; then
npx prettier --write "$FILE"
git add "$FILE"
fi
done
fi
使用建议
- 版本控制:先提交当前代码,再运行格式化
- 渐进式应用:按模块分批格式化,便于排查问题
- 配置文件:创建
.editorconfig统一编辑器设置 - CI/CD:在持续集成中加入格式检查
选择哪种方法取决于你的项目语言、团队规范和现有工具链,Prettier 是最通用和推荐的选择。