# 实用的 Hooks

URL: https://caijiao.org/claude-code-in-action/17-useful-hooks
Source: docs/claude-code-in-action/17-useful-hooks.md
Description: 提供多种实用的 Hook 示例，包括自动格式化、类型检查、测试运行等场景的完整配置

原文链接：[https://anthropic.skilljar.com/claude-code-in-action/303248](https://anthropic.skilljar.com/claude-code-in-action/303248)

**标签：** 视频 + 讲义

---

本节分享一些在真实项目中非常实用的 Hook 示例，你可以直接采用或根据需要进行修改。

## 1. 自动格式化 Hook

在每次修改前自动格式化代码：

```json
{
  "hooks": {
    "BeforeModify": [
      {
        "name": "Format code",
        "command": "npm run format",
        "description": "修改前自动格式化代码"
      }
    ]
  }
}
```

## 2. 类型检查 Hook

修改 TypeScript 文件后检查类型：

```json
{
  "hooks": {
    "AfterModify": [
      {
        "name": "Type check",
        "command": "npx tsc --noEmit",
        "runOnlyWhen": "changedFiles匹配 **/*.ts **/*.tsx",
        "description": "修改后检查 TypeScript 类型"
      }
    ]
  }
}
```

## 3. 测试 Hook

修改测试文件后自动运行测试：

```json
{
  "hooks": {
    "AfterModify": [
      {
        "name": "Run tests",
        "command": "npm test -- --run",
        "runOnlyWhen": "changedFiles匹配 **/*.test.ts **/*.test.tsx",
        "description": "修改测试文件后运行测试",
        "timeout": 180000
      }
    ]
  }
}
```

## 4. ESLint Hook

在提交前运行 ESLint：

```json
{
  "hooks": {
    "BeforeModify": [
      {
        "name": "ESLint check",
        "command": "npx eslint . --max-warnings=0",
        "runOnlyWhen": "changedFiles匹配 **/*.js **/*.ts",
        "description": "修改 JS/TS 文件前检查代码规范"
      }
    ]
  }
}
```

## 5. 复合 Hook

组合多个检查步骤：

```json
{
  "hooks": {
    "BeforeModify": [
      {
        "name": "Pre-commit checks",
        "command": "npm run pre-commit",
        "description": "运行所有预提交检查"
      }
    ]
  }
}
```

在 `package.json` 中定义：

```json
{
  "scripts": {
    "pre-commit": "npm run format && npm run lint"
  }
}
```

## 6. 数据库迁移 Hook

修改数据库相关文件后提示：

```json
{
  "hooks": {
    "AfterModify": [
      {
        "name": "Migration reminder",
        "command": "echo '记得运行数据库迁移！'",
        "runOnlyWhen": "changedFiles匹配 **/migrations/** prisma/schema.prisma",
        "description": "数据库变更后提醒迁移"
      }
    ]
  }
}
```

---

**下一节：** [18 另一个实用 Hook](./18-another-useful-hook)
