setup-husky.sh
2.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#!/bin/bash
# Husky 初始化脚本
# 使用方法: bash scripts/setup-husky.sh
set -e
echo "🔧 开始设置 Husky Git Hooks..."
# 检查是否在项目根目录
if [ ! -f "package.json" ]; then
echo "❌ 错误:请在项目根目录运行此脚本"
exit 1
fi
# 安装依赖(如果未安装)
echo "📦 安装依赖..."
pnpm add -D husky lint-staged prettier || {
echo "❌ 依赖安装失败"
exit 1
}
# 初始化 Husky
echo "🪝 初始化 Husky..."
npx husky install || {
echo "❌ Husky 初始化失败"
exit 1
}
# 创建 pre-commit 钩子
echo "📝 创建 pre-commit 钩子..."
cat > .husky/pre-commit << 'EOF'
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
echo "🔍 运行代码检查..."
pnpm lint-staged
EOF
# 添加执行权限
chmod +x .husky/pre-commit
# 创建 commit-msg 钩子(可选,用于验证 commit 信息)
cat > .husky/commit-msg << 'EOF'
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
# 验证 commit 信息格式(可选)
# commit_regex='^(feat|fix|docs|style|refactor|test|chore|build|ci|perf|revert)(\(.+\))?: .{1,50}'
#
#if ! grep -qE "$commit_regex" "$1"; then
# echo "❌ Commit 信息格式不正确"
# echo "✅ 正确格式: type(scope): subject"
# echo "📝 类型: feat, fix, docs, style, refactor, test, chore, etc."
# exit 1
#fi
echo "✅ Commit 信息验证通过"
EOF
chmod +x .husky/commit-msg
# 更新 package.json scripts
echo "📦 更新 package.json scripts..."
if command -v jq > /dev/null 2>&1; then
# 如果系统有 jq,使用它更新 package.json
jq '.scripts.prepare = "husky install"' package.json > package.json.tmp && mv package.json.tmp package.json
else
echo "⚠️ 请手动在 package.json 的 scripts 中添加: \"prepare\": \"husky install\""
fi
echo "✅ Git Hooks 设置完成!"
echo ""
echo "📝 使用说明:"
echo " - 每次 commit 前会自动运行 ESLint 和 Prettier"
echo " - 如果检查失败,commit 将被中止"
echo " - 使用 'git commit --no-verify' 跳过检查(不推荐)"
echo ""
echo "🎯 现在可以开始开发了!"