实现一个 Hook
原文链接:https://anthropic.skilljar.com/claude-code-in-action/303246
标签: 视频 + 讲义
本节通过一个完整的示例,演示如何实现一个实用的 Hook。我们将创建一个在代码修改后自动运行测试的 Hook。
场景描述
我们想要实现以下功能:
- 当 Claude 修改代码后,自动运行相关测试
- 如果测试失败,提示用户
- 跳过不需要测试的文件(如文档、配置文件)
步骤一:创建 settings.json
首先在 .claude 目录下创建或编辑 settings.json:
json
{
"hooks": {
"AfterModify": [
{
"name": "Run tests after modify",
"command": "npm test",
"description": "修改代码后运行测试",
"runOnlyWhen": "changedFiles匹配 **/*.test.ts && **/*.test.tsx",
"timeout": 120000,
"continueOnError": true
}
]
}
}步骤二:理解配置项
runOnlyWhen使用条件表达式,只在修改了测试文件时运行continueOnError: true确保测试失败不会阻止 Claude 继续工作timeout设置为 120 秒,给测试足够时间
步骤三:测试 Hook
创建 Hook 后,尝试让 Claude 修改一个测试文件,观察 Hook 是否正确触发:
- 要求 Claude 修改某个测试文件
- 观察终端输出,看是否运行了测试
- 检查测试结果反馈
步骤四:优化 Hook
根据实际使用体验优化配置:
- 调整条件表达式更精确匹配文件
- 增加多条 Hook 覆盖不同场景
- 调整超时时间避免误判
进阶:多条 Hook 组合
可以组合多个 Hook 实现更复杂的工作流:
json
{
"hooks": {
"BeforeModify": [
{
"name": "Format code",
"command": "npm run format"
}
],
"AfterModify": [
{
"name": "Run tests",
"command": "npm test"
},
{
"name": "Check coverage",
"command": "npm run coverage"
}
]
}
}这样实现:修改前自动格式化 → 修改后运行测试 → 测试后检查覆盖率。
下一节: 16 Hooks 常见坑点