本文目录导读:

我来为您介绍如何编写统一代码格式化规则脚本,涵盖多种主流方式:
使用 Prettier(最推荐)
安装和配置脚本
npm install --save-dev prettier
创建配置文件 .prettierrc
{
"semi": true,
"trailingComma": "es5",
"singleQuote": true,
"printWidth": 100,
"tabWidth": 2,
"useTabs": false,
"bracketSpacing": true,
"arrowParens": "always",
"endOfLine": "lf",
"jsxSingleQuote": false
}
格式化脚本 format.sh
#!/bin/bash
# 定义项目根目录
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
# 定义要格式化的目录/文件
TARGET_DIRS=("src" "test" "scripts")
# 格式化和检查
echo "Running Prettier formatting..."
# 格式化所有目标文件
npx prettier --write \
--config "$ROOT_DIR/.prettierrc" \
"$ROOT_DIR/{"${TARGET_DIRS[@]}"}/**/*.{js,jsx,ts,tsx,json,css,scss,md}"
# 检查未格式化文件
echo "Checking for unformatted files..."
npx prettier --check \
--config "$ROOT_DIR/.prettierrc" \
"$ROOT_DIR/"
ESLint + Prettier 集成
安装依赖
npm install --save-dev eslint prettier eslint-config-prettier eslint-plugin-prettier
ESLint 配置 .eslintrc.json
{
"extends": [
"eslint:recommended",
"plugin:prettier/recommended"
],
"plugins": ["prettier"],
"rules": {
"prettier/prettier": "error",
"indent": ["error", 2],
"linebreak-style": ["error", "unix"],
"quotes": ["error", "single"],
"semi": ["error", "always"],
"no-unused-vars": "warn",
"no-console": "warn"
},
"env": {
"es6": true,
"node": true,
"browser": true
},
"parserOptions": {
"ecmaVersion": 2022,
"sourceType": "module"
}
}
多语言格式化脚本
format-all.sh - 通用格式化脚本
#!/bin/bash
set -e # 遇到错误立即退出
echo "🔍 Starting code formatting..."
# 1. JavaScript/TypeScript 文件
format_js() {
echo "📝 Formatting JS/TS files..."
npx prettier --write "**/*.{js,jsx,ts,tsx}"
npx eslint --fix "**/*.{js,jsx,ts,tsx}"
}
# 2. Python 文件
format_python() {
echo "🐍 Formatting Python files..."
if command -v black &> /dev/null; then
black .
else
echo "⚠️ Black not installed, install with: pip install black"
fi
}
# 3. Go 文件
format_go() {
echo "🔵 Formatting Go files..."
gofmt -w .
package.json 脚本配置
{
"scripts": {
"format": "bash scripts/format.sh",
"format:check": "prettier --check .",
"format:fix": "prettier --write .",
"lint": "eslint . --fix",
"lint:check": "eslint ."
}
}
配置文件示例
.editorconfig(编辑器通用配置)
root = true [*] indent_style = space indent_size = 2 end_of_line = lf charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true [*.md] trim_trailing_whitespace = false [*.py] indent_size = 4
.prettierrc.yaml(YAML 格式)
semi: true trailingComma: "all" singleQuote: true printWidth: 120 tabWidth: 2 useTabs: false bracketSpacing: true arrowParens: "always" proseWrap: "always"
提交前格式化(Git Hooks)
安装 husky 和 lint-staged
npm install --save-dev husky lint-staged
配置 .lintstagedrc.json
{
"*.{js,jsx,ts,tsx}": [
"eslint --fix",
"prettier --write"
],
"*.{json,md,css,scss}": [
"prettier --write"
]
}
package.json 添加
{
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
}
}
自动化格式化脚本
format-enhanced.sh
#!/bin/bash
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
echo -e "${BLUE}=== Code Formatting Tool ===${NC}"
# 检查依赖
check_dependencies() {
local deps=("prettier" "eslint")
for dep in "${deps[@]}"; do
if ! npx --quiet "$dep" --version &> /dev/null; then
echo -e "${RED}❌ $dep not found. Run: npm install${NC}"
exit 1
fi
done
}
# 格式化并统计
format_with_stats() {
local files_before=0
local files_after=0
echo -e "${YELLOW}📊 Starting formatting...${NC}"
# 统计文件数量
files_before=$(find . -type f \( -name "*.js" -o -name "*.ts" -o -name "*.jsx" -o -name "*.tsx" \) | wc -l)
# 执行格式化
npx prettier --write "**/*.{js,ts,jsx,tsx,json,css,scss,md}" 2>&1 | grep -E "^(\[warn\]|\[error\])"
# 检查结果
if npx prettier --check "**/*.{js,ts,jsx,tsx,json,css,scss,md}" &> /dev/null; then
echo -e "${GREEN}✅ All files formatted successfully!${NC}"
else
echo -e "${RED}❌ Some files need formatting${NC}"
exit 1
fi
}
# 主函数
main() {
check_dependencies
# 显示配置信息
echo -e "${BLUE}Using configuration:${NC}"
cat .prettierrc.json 2>/dev/null || echo "No .prettierrc.json found"
format_with_stats
echo -e "${GREEN}✨ Formatting complete!${NC}"
}
main "$@"
项目配置总结
推荐项目结构
project/
├── .editorconfig
├── .prettierrc
├── .eslintrc.json
├── .prettierignore
├── .lintstagedrc.json
├── scripts/
│ ├── format.sh
│ └── format-enhanced.sh
└── package.json
.prettierignore
node_modules/
dist/
build/
coverage/
*.min.*
*.map
使用建议
- 团队标准化:统一配置文件并强制使用
- CI/CD 集成:在 CI 中运行格式检查
- 编辑器集成:配置编辑器自动格式化
- 增量应用:从新项目开始,逐步应用到旧项目
需要我详细解释某个特定部分或提供更多配置示例吗?
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播