钩子最佳实践
设计原则
1. 具体和清晰
编写详细明确的指令
创建钩子时要确保指令清晰、无歧义:
好的指令示例:
name: "React 组件验证器"
instructions: |
1. 检查组件是否包含 PropTypes 定义
2. 验证组件名称是否采用 PascalCase
3. 确保导出语句格式正确
4. 检查是否包含必要的 import 语句
5. 验证 JSX 语法的正确性
避免的写法:
name: "代码检查"
instructions: "检查代码质量"
每个钩子专注单一任务
将复杂的任务拆分为多个专门的钩子:
# 拆分前 - 过于复杂
name: "代码质量检查器"
instructions: "检查格式、lint、测试、文档和安全问题"
# 拆分后 - 清晰专注
hooks:
- name: "代码格式化器"
instructions: "应用 Prettier 格式化"
- name: "Lint 检查器"
instructions: "运行 ESLint 并修复可自动修复的问题"
- name: "测试覆盖率检查"
instructions: "验证新代码是否有对应的测试"
使用编号步骤处理复杂操作
对于多步骤操作,使用清晰的编号列表:
name: "API 端点验证器"
instructions: |
1. 检查路由定义的语法正确性
2. 验证请求/响应模型是否存在
3. 确保包含适当的错误处理
4. 检查是否添加了相应的测试用例
5. 验证 API 文档是否已更新
6. 确认安全验证是否实施
2. 测试和性能
样本文件测试
在部署钩子之前进行充分测试:
测试流程:
testing_workflow:
1. 创建测试文件集
2. 在测试环境运行钩子
3. 验证输出结果
4. 测试边界情况
5. 确认性能表现
6. 部署到生产环境
测试文件示例:
// test-files/sample-component.jsx
import React from 'react';
// 故意包含一些问题用于测试钩子
const TestComponent = (props) => {
return <div>{props.content}</div>
}
export default TestComponent
边界情况处理
确保钩子能够处理各种异常情况:
edge_cases_testing:
empty_files: "测试空文件的处理"
malformed_syntax: "测试语法错误文件"
large_files: "测试大文件的性能"
special_characters: "测试特殊字符和编码"
binary_files: "测试二进制文件的跳过"
性能优化
确保钩子不会拖慢开发工作流程:
性能考虑因素:
- 触发事件的频率
- 处理文件的大小
- 外部工具的调用时间
- 网络请求的延迟
优化策略:
performance_optimization:
file_filtering:
- 使用精确的文件模式
- 排除不相关的目录
- 限制文件大小范围
execution_efficiency:
- 缓存重复计算结果
- 并行处理独立任务
- 设置合理的超时时间
resource_management:
- 限制并发执行数量
- 及时清理临时文件
- 监控内存使用情况
安全考虑
输入验证
谨慎验证输入
钩子应该能够安全处理各种输入:
name: "安全的配置文件处理器"
instructions: |
1. 验证 JSON 文件的格式正确性
2. 检查是否包含敏感信息(密码、API 密钥)
3. 验证配置项的有效性
4. 如发现敏感信息,建议使用环境变量
5. 确保配置符合项目安全标准
优雅处理异常内容
当遇到意外的文件内容时,钩子应该:
error_handling_strategy:
invalid_syntax:
action: "报告语法错误位置"
fallback: "跳过处理,记录警告"
unsupported_format:
action: "识别文件类型"
fallback: "提示用户检查文件格式"
corrupted_data:
action: "尝试恢复部分数据"
fallback: "建议从备份恢复"
目标特定化
精确的文件模式
使用精确的文件模式避免不必要的执行:
# 好的文件模式
precise_patterns:
react_components: "src/components/**/*.{jsx,tsx}"
api_routes: "api/routes/**/*.js"
test_files: "tests/**/*.test.{js,ts}"
config_files: "config/*.{json,yaml,yml}"
# 避免的文件模式
avoid_patterns:
too_broad: "**/*" # 匹配所有文件
no_extension: "src/**/*" # 包含非代码文件
目录级别的控制
为不同目录设置不同的钩子策略:
directory_specific_hooks:
src/:
hooks:
- code_formatter
- lint_checker
- test_generator
docs/:
hooks:
- markdown_formatter
- link_checker
- content_validator
config/:
hooks:
- security_scanner
- format_validator
恶意输入防护
输入清理
name: "安全输入处理器"
instructions: |
1. 扫描文件内容中的潜在恶意代码
2. 检查是否包含可疑的脚本注入
3. 验证外部链接的安全性
4. 确保文件大小在合理范围内
5. 报告任何安全隐患
团队协作
文档和标准
清晰的文档说明
为每个钩子维护详细的文档:
hook_documentation:
name: "钩子名称"
purpose: "钩子的主要功能和目标"
trigger_conditions: "什么情况下会触发"
file_targets: "处理哪些类型的文件"
expected_behavior: "预期的行为和输出"
examples: "使用示例和效果展示"
maintenance_notes: "维护说明和注意事项"
version_history: "版本更新记录"
行为示例
提供具体的行为示例帮助团队理解:
name: "API 文档生成器"
examples:
input_file: |
// api/users.js
app.get('/api/users', (req, res) => {
// 获取用户列表
});
expected_output: |
/**
* @api {get} /api/users 获取用户列表
* @apiName GetUsers
* @apiGroup Users
* @apiSuccess {Object[]} users 用户列表
*/
版本控制集成
钩子配置版本化
将钩子配置纳入版本控制:
# .kiro/hooks.yml
team_hooks:
version: "1.2.0"
last_updated: "2025-07-21"
maintainer: "team@company.com"
hooks:
security_scanner:
enabled: true
trigger: onSave
pattern: "**/*.{js,ts,jsx,tsx}"
instructions: "扫描潜在的安全漏洞"
test_coverage:
enabled: true
trigger: preCommit
instructions: "确保新代码有测试覆盖"
变更管理流程
change_management:
proposal:
- 创建钩子变更提案
- 说明变更原因和影响
- 获得团队评审和批准
testing:
- 在分支环境测试新钩子
- 验证不会破坏现有工作流
- 收集团队成员反馈
deployment:
- 逐步部署到团队成员
- 监控钩子执行效果
- 收集使用数据和反馈
maintenance:
- 定期审查钩子效果
- 根据反馈优化配置
- 更新文档和示例
团队标准化
创建标准钩子
为常见的团队工作流程创建标准钩子:
standard_team_hooks:
code_quality:
- format_on_save
- lint_check
- import_organizer
security:
- secret_scanner
- dependency_audit
- vulnerability_check
documentation:
- comment_generator
- readme_updater
- changelog_maintainer
testing:
- test_generator
- coverage_checker
- e2e_validator
工作流程集成
将钩子集成到团队的开发工作流程中:
workflow_integration:
development_phase:
- auto_formatter: "保持代码一致性"
- test_runner: "确保功能正确性"
- documentation_helper: "维护代码文档"
code_review_phase:
- security_scanner: "识别安全风险"
- complexity_analyzer: "评估代码复杂度"
- performance_checker: "检查性能影响"
deployment_phase:
- build_validator: "验证构建成功"
- dependency_checker: "检查依赖完整性"
- deployment_script: "自动化部署流程"
持续维护
定期更新
根据项目演进更新钩子逻辑
随着项目的发展,钩子也需要相应更新:
update_triggers:
technology_changes:
- "采用新的框架或库"
- "更新构建工具配置"
- "变更代码规范标准"
team_changes:
- "团队规模变化"
- "工作流程调整"
- "质量标准更新"
project_changes:
- "功能需求变化"
- "性能要求提升"
- "安全标准强化"
更新策略
update_strategy:
assessment:
- 评估当前钩子的效果
- 识别改进机会
- 收集团队反馈
planning:
- 制定更新计划
- 评估变更影响
- 安排测试时间
implementation:
- 在测试环境实施变更
- 验证新功能效果
- 逐步推广到生产环境
monitoring:
- 监控更新后的表现
- 收集使用数据
- 根据反馈进一步优化
清理和优化
移除不需要的钩子
定期清理不再使用的钩子:
cleanup_checklist:
usage_analysis:
- 分析钩子执行频率
- 评估钩子实际价值
- 识别重复功能
impact_assessment:
- 评估移除的影响
- 确认无依赖关系
- 通知相关团队成员
removal_process:
- 先禁用钩子观察影响
- 备份钩子配置
- 正式删除不需要的钩子
提示优化
基于实际结果优化提示
根据钩子的实际执行结果持续改进:
prompt_optimization:
effectiveness_metrics:
- 成功率统计
- 执行时间分析
- 错误率评估
- 用户满意度调查
improvement_strategies:
- 简化复杂指令
- 增加具体示例
- 改进错误处理
- 优化执行逻辑
testing_approach:
- A/B 测试不同的提示版本
- 收集性能数据
- 比较用户反馈
- 选择最优方案
提示迭代示例
# 初始版本
v1_prompt: "检查代码质量"
# 改进版本
v2_prompt: |
检查以下代码质量问题:
1. 语法错误
2. 格式问题
3. 未使用的变量
# 最终优化版本
v3_prompt: |
执行代码质量检查:
1. 运行 ESLint 检查语法和样式问题
2. 识别未使用的导入和变量
3. 验证函数和变量命名规范
4. 检查代码复杂度是否合理
5. 确保包含必要的注释
6. 提供具体的修复建议
高级技巧
条件执行
智能触发条件
使用复杂的条件逻辑优化钩子执行:
name: "智能测试运行器"
trigger: onSave
conditions:
- file_extension: [".js", ".ts", ".jsx", ".tsx"]
- file_size: "<1MB"
- not_in_directory: ["node_modules", "dist", "build"]
- contains_functions: true
instructions: |
如果文件包含新增或修改的函数:
1. 识别变更的函数
2. 查找相关的测试文件
3. 运行相关测试
4. 如无测试,生成基础测试模板
钩子链
name: "完整 CI 流程"
chain:
- name: "代码格式化"
instructions: "格式化代码并修复基本问题"
- name: "安全扫描"
instructions: "扫描安全漏洞和敏感信息"
condition: "previous_step_success"
- name: "测试执行"
instructions: "运行相关测试用例"
condition: "no_security_issues"
- name: "构建验证"
instructions: "验证代码能正确构建"
condition: "tests_passing"
性能监控
performance_monitoring:
metrics:
- execution_time
- memory_usage
- success_rate
- error_frequency
alerting:
slow_execution: ">10s"
high_memory: ">100MB"
error_rate: ">5%"
optimization_triggers:
- "连续5次执行超过阈值"
- "错误率超过10%"
- "用户投诉性能问题"
页面最后更新:2025年7月21日