本文目录导读:

- 使用 ESLint(JavaScript/TypeScript)
- 使用 Prettier(代码格式化)
- Husky + lint-staged(Git提交前检查)
- Python 代码检查(Flake8 + Black)
- 使用 GitHub Actions(CI自动检查)
- 完整的 Shell 脚本示例
- 配置文件自动化
- 使用建议
我来介绍几种常见的自动检查代码规范的方法和工具配置方案。
使用 ESLint(JavaScript/TypeScript)
安装和配置
# 安装 ESLint npm install eslint --save-dev # 初始化配置 npx eslint --init
配置文件示例 (.eslintrc.js)
module.exports = {
env: {
browser: true,
es2021: true,
node: true,
},
extends: [
'eslint:recommended',
'plugin:react/recommended',
'plugin:@typescript-eslint/recommended',
],
parser: '@typescript-eslint/parser',
parserOptions: {
ecmaFeatures: {
jsx: true,
},
ecmaVersion: 12,
sourceType: 'module',
},
plugins: ['react', '@typescript-eslint'],
rules: {
'indent': ['error', 2],
'quotes': ['error', 'single'],
'semi': ['error', 'always'],
'no-unused-vars': 'error',
'no-console': 'warn',
},
};
运行脚本
{
"scripts": {
"lint": "eslint src/",
"lint:fix": "eslint src/ --fix"
}
}
使用 Prettier(代码格式化)
安装和配置
npm install prettier --save-dev
配置文件 (.prettierrc)
{
"semi": true,
"trailingComma": "es5",
"singleQuote": true,
"printWidth": 80,
"tabWidth": 2,
"useTabs": false
}
自动格式化脚本
{
"scripts": {
"format": "prettier --write \"src/**/*.{js,jsx,ts,tsx,json,css,scss}\"",
"format:check": "prettier --check \"src/**/*.{js,jsx,ts,tsx,json,css,scss}\""
}
}
Husky + lint-staged(Git提交前检查)
安装
npm install husky lint-staged --save-dev npx husky install
配置 package.json
{
"lint-staged": {
"*.{js,jsx,ts,tsx}": ["eslint --fix", "prettier --write"],
"*.{json,css,scss,md}": ["prettier --write"]
}
}
配置 Husky 钩子
# 创建 pre-commit 钩子 npx husky add .husky/pre-commit "npx lint-staged"
Python 代码检查(Flake8 + Black)
安装
pip install flake8 black isort
配置文件 (.flake8)
[flake8] max-line-length = 88 extend-ignore = E203, W503 exclude = .git,__pycache__,build,dist
运行脚本
# check_code.py
import subprocess
import sys
def run_flake8():
result = subprocess.run(
['flake8', 'src/', 'tests/'],
capture_output=True,
text=True
)
if result.returncode != 0:
print("Flake8 检查结果:")
print(result.stdout)
print(result.stderr)
return False
return True
def run_black():
result = subprocess.run(
['black', '--check', 'src/', 'tests/'],
capture_output=True,
text=True
)
if result.returncode != 0:
print("Black 格式检查结果:")
print(result.stdout)
return False
return True
def run_isort():
result = subprocess.run(
['isort', '--check-only', 'src/', 'tests/'],
capture_output=True,
text=True
)
if result.returncode != 0:
print("isort 导入排序检查:")
print(result.stdout)
return False
return True
if __name__ == "__main__":
checks = [
("Flake8", run_flake8),
("Black", run_black),
("isort", run_isort)
]
all_passed = True
for name, check_func in checks:
print(f"正在运行 {name}...")
if not check_func():
all_passed = False
print(f"❌ {name} 检查失败")
else:
print(f"✅ {name} 检查通过")
sys.exit(0 if all_passed else 1)
使用 GitHub Actions(CI自动检查)
配置文件 (.github/workflows/lint.yml)
name: Code Quality Check
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]
jobs:
lint:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [16.x, 18.x]
steps:
- uses: actions/checkout@v3
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
- name: Install dependencies
run: npm ci
- name: Run ESLint
run: npm run lint
- name: Run Prettier check
run: npm run format:check
完整的 Shell 脚本示例
check-code-quality.sh
#!/bin/bash
set -e
echo "=== 代码质量检查开始 ==="
echo ""
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
# 记录失败数量
FAILURES=0
# JavaScript/TypeScript 检查
check_js() {
echo -e "${YELLOW}[1/4] 运行 ESLint...${NC}"
if npx eslint src/ --max-warnings=0; then
echo -e "${GREEN} ✅ ESLint 检查通过${NC}"
else
echo -e "${RED} ❌ ESLint 检查失败${NC}"
((FAILURES++))
fi
echo -e "${YELLOW}[2/4] 检查代码格式...${NC}"
if npx prettier --check "src/**/*.{js,jsx,ts,tsx}"; then
echo -e "${GREEN} ✅ Prettier 格式检查通过${NC}"
else
echo -e "${RED} ❌ Prettier 格式检查失败${NC}"
((FAILURES++))
fi
}
# Python 检查
check_python() {
echo -e "${YELLOW}[3/4] 运行 Flake8...${NC}"
if flake8 src/ tests/; then
echo -e "${GREEN} ✅ Flake8 检查通过${NC}"
else
echo -e "${RED} ❌ Flake8 检查失败${NC}"
((FAILURES++))
fi
echo -e "${YELLOW}[4/4] 类型检查...${NC}"
if mypy src/; then
echo -e "${GREEN} ✅ mypy 类型检查通过${NC}"
else
echo -e "${RED} ❌ mypy 类型检查失败${NC}"
((FAILURES++))
fi
}
# 检测项目类型
if [ -f "package.json" ]; then
check_js
fi
if [ -f "setup.py" ] || [ -f "requirements.txt" ]; then
check_python
fi
echo ""
echo "=== 代码质量检查结束 ==="
if [ $FAILURES -eq 0 ]; then
echo -e "${GREEN}🎉 所有检查通过!${NC}"
exit 0
else
echo -e "${RED}❌ $FAILURES 个检查项失败${NC}"
exit 1
fi
配置文件自动化
初始化脚本 init-lint.sh
#!/bin/bash
echo "正在初始化代码规范检查工具..."
# 创建配置文件
cat > .eslintrc.js << 'EOF'
module.exports = {
extends: ['eslint:recommended'],
rules: {
'no-console': 'warn',
'no-unused-vars': 'error',
},
};
EOF
cat > .prettierrc << 'EOF'
{
"singleQuote": true,
"trailingComma": "all",
"printWidth": 80,
"tabWidth": 2
}
EOF
# 更新 package.json
if [ -f "package.json" ]; then
npm install --save-dev eslint prettier husky lint-staged
# 添加脚本
node -e "
const pkg = require('./package.json');
pkg.scripts = {
...pkg.scripts,
'lint': 'eslint src/',
'format': 'prettier --write \"src/**/*.{js,jsx,ts,tsx}\"',
'format:check': 'prettier --check \"src/**/*.{js,jsx,ts,tsx}\"',
'prepare': 'husky install'
};
require('fs').writeFileSync('package.json', JSON.stringify(pkg, null, 2));
"
# 初始化 husky
npx husky install
npx husky add .husky/pre-commit "npx lint-staged"
fi
echo "✅ 初始化完成!"
使用建议
- 持续集成:将检查脚本集成到 CI/CD 流程中
- 渐进式采用:先对新增代码进行检查,逐渐覆盖旧代码
- 团队统一:使用统一的配置文件和规则
- 自动修复:配置
--fix参数自动修复简单问题 - 忽略文件:使用
.eslintignore、.prettierignore排除不需要检查的文件
这样的自动化检查流程能有效保证代码质量和一致性。
版权声明: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直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播