实用脚本能自动格式化代码吗?

wen 实用脚本 2

本文目录导读:

实用脚本能自动格式化代码吗?

  1. 通用方案:使用 prettier (前端/全栈/通用)
  2. 通用方案:使用 clang-format (C/C++/Java/Objective-C)
  3. 团队协作最佳实践:Git Hooks + lint-staged
  4. 针对 Python 的格式化脚本(使用 black + isort)
  5. 一键格式化所有常见语言(通用脚本)
  6. 重要提示(建议)

是的,实用脚本完全可以自动格式化代码,而且这是开发中非常常见且高效的做法,通过脚本自动格式化代码,可以确保团队代码风格一致、减少人工审查的琐碎工作、避免因格式问题导致的合并冲突。

下面我为你介绍几种不同场景下的实用脚本方案:

通用方案:使用 prettier (前端/全栈/通用)

prettier 是目前最流行的代码格式化工具,支持 JavaScript、TypeScript、CSS、HTML、JSON、Markdown 等多种语言。

脚本示例(前提 npm 环境):

在项目根目录创建 format.js 或直接在 package.jsonscripts 中配置:

// 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 组合。

步骤:

  1. 安装依赖

    npm install --save-dev husky lint-staged
  2. 配置 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

重要提示(建议)

  1. 不要格式化第三方库代码:脚本中要排除 node_modules/venv/build/dist/vendor/ 等目录,通常格式化工具默认会忽略 .gitignore 中的路径。
  2. 在 CI/CD 中使用 format:check:在 CI 流水线中,不要使用 --write 修改代码,而是用 --check 参数,如果格式不对则让流水线失败,这样可以强制保证提交的代码符合规范。
  3. 统一团队配置:将配置文件(如 .prettierrc.editorconfig.clang-format)提交到版本控制中,确保所有成员使用相同的规则。
  4. 与编辑器集成:建议团队成员在编辑器中开启“保存时自动格式化”功能,这样可以在编码阶段就解决格式问题,减少后期脚本运行的次数。

是的,通过脚本自动格式化代码不仅可行,而且是专业开发团队的标配,选择哪种方案取决于你的项目语言和技术栈:

  • 现代 JavaScript/TypeScript 项目prettier + husky + lint-staged 是最佳组合。
  • C/C++/Java 项目clang-format + 项目根目录 .clang-format 配置文件。
  • Python 项目black + isort + pre-commit hooks。
  • 多语言项目:可以写一个通用的脚本,按需调用不同的格式化工具。

如需针对你的具体项目(语言、框架、环境)给出更精确的脚本,可以提供更多细节,我可以帮你定制。

抱歉,评论功能暂时关闭!