Claude Code Hooks 完全指南:自动格式化、自动测试等实用配置
详解如何通过 Claude Code Hooks 实现自动格式化和自动测试。包含实际配置示例和真实使用场景。
什么是 Hooks?
Claude Code Hooks 允许你在特定操作前后自动执行自定义命令。你可以设置在文件保存后自动格式化、代码修改后自动运行测试等功能。
Hooks 在 .claude/settings.json 中定义,当 Claude Code 执行特定操作时会触发对应的 Shell 命令。
Hook 类型
Claude Code 支持以下事件触发点的 Hooks:
| Hook 事件 | 触发时机 |
|---|---|
PreToolUse | 工具执行前 |
PostToolUse | 工具执行后 |
Notification | 发送通知时 |
Stop | Claude Code 完成响应时 |
基本配置
Hooks 在 .claude/settings.json 的 hooks 字段中定义:
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"command": "npx prettier --write \"$CLAUDE_FILE_PATH\""
}
]
}
}
配置结构
- matcher:用于匹配触发工具名称的正则表达式
- command:要执行的 Shell 命令
场景 1:自动格式化
文件编辑后自动运行 Prettier:
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"command": "npx prettier --write \"$CLAUDE_FILE_PATH\""
}
]
}
}
配置完成后,每当 Claude Code 创建或编辑文件时,Prettier 都会自动进行格式化。无需手动操作,团队的代码风格就能保持一致。
场景 2:自动 Lint 检查
集成 ESLint 自动修复:
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"command": "npx eslint --fix \"$CLAUDE_FILE_PATH\" 2>/dev/null || true"
}
]
}
}
末尾的 || true 可以防止 lint 错误导致 Hook 执行失败,确保 Claude Code 能继续处理后续操作。
场景 3:代码变更后自动测试
文件编辑后自动运行相关测试并反馈结果:
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"command": "npx vitest related \"$CLAUDE_FILE_PATH\" --run 2>&1 | tail -20"
}
]
}
}
Vitest 的 related 选项只会运行与修改文件相关的测试,比完整测试套件快得多。
场景 4:自动类型检查
文件变更后运行 TypeScript 类型检查:
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"command": "npx tsc --noEmit 2>&1 | head -30"
}
]
}
}
场景 5:拦截危险命令
通过 PreToolUse Hook 阻止高风险命令的执行:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"command": "if echo \"$CLAUDE_TOOL_INPUT\" | grep -qE 'rm -rf|drop table|git push.*force'; then echo 'BLOCKED: Dangerous command detected' >&2; exit 1; fi"
}
]
}
}
当 Hook 以退出码 1 结束时,Claude Code 会跳过该工具的执行。
场景 6:完成通知
当 Claude Code 完成任务时发送通知:
{
"hooks": {
"Stop": [
{
"matcher": "",
"command": "notify-send 'Claude Code' 'Task completed' 2>/dev/null; echo 'Done'"
}
]
}
}
macOS 上可以使用:
{
"hooks": {
"Stop": [
{
"matcher": "",
"command": "osascript -e 'display notification \"Task completed\" with title \"Claude Code\"'"
}
]
}
}
组合多个 Hooks
在实际项目中,组合使用多个 Hooks 效果最佳:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"command": "if echo \"$CLAUDE_TOOL_INPUT\" | grep -qE 'rm -rf /'; then exit 1; fi"
}
],
"PostToolUse": [
{
"matcher": "Write|Edit",
"command": "npx prettier --write \"$CLAUDE_FILE_PATH\" 2>/dev/null || true"
},
{
"matcher": "Write|Edit",
"command": "npx eslint --fix \"$CLAUDE_FILE_PATH\" 2>/dev/null || true"
}
],
"Stop": [
{
"matcher": "",
"command": "echo '✓ Task completed'"
}
]
}
}
Hooks 编写技巧
1. 保持执行时间短
Hooks 是同步执行的,耗时操作会拖慢 Claude Code 的响应速度。使用 related 缩小测试范围,用 head 或 tail 截断输出。
2. 优雅地处理错误
Hook 执行出错可能会中断 Claude Code 的工作流。使用 || true 和 2>/dev/null 确保安全。
3. 善用环境变量
充分利用 Hooks 中可用的环境变量。$CLAUDE_FILE_PATH 可以获取正在操作的文件路径。
总结
Hooks 让你可以深度定制 Claude Code 的工作流。自动格式化加自动测试的组合在维护代码质量方面尤其强大。先从 Prettier 自动格式化开始,然后逐步扩展。
免费 PDF:5 分钟看懂 Claude Code 速查表
只需留下邮箱,我们就会立即把这份 A4 一页速查表 PDF 发送给你。
我们会严格保护你的个人信息,绝不发送垃圾邮件。
把 Claude Code 变成真正能带来结果的工作流
先领取中文说明的免费 PDF,再进入英文商品页选择合适的教材。如果你需要团队落地、流程设计或内容变现支持,也可以直接咨询。
本文作者
Masa
深度使用 Claude Code 的工程师。运营 claudecode-lab.com——一个涵盖 10 种语言、超过 2,000 页内容的科技媒体。
相关文章
Claude Code/Codex 安全 Agent Harness 实战:权限、验证与回滚
用权限策略、执行计划、验证脚本和回滚日志,为 Claude Code 与 Codex 搭建更安全的 AI Agent 工作流。
Claude Code 子代理 (Subagent) 实战模式 10 选
使用 Claude Code 的子代理功能,掌握 10 种实战模式。学习如何使用并行处理、专业化和上下文隔离来加倍开发速度。
Claude Code Agent SDK入门 ― 快速构建自主智能代理
学习如何使用Claude Code Agent SDK构建自主AI代理。涵盖环境搭建、工具定义和多步执行,附带实践代码示例。