setup-husky.sh 2.01 KB
#!/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 "🎯 现在可以开始开发了!"