答案:使用 CaptainHook 和 Composer 可自动执行代码规范。通过 composer require --dev 安装 CaptainHook 并初始化配置文件,在 captainhook.json 中设置 pre-commit 钩子运行 php-cs-fixer 进行检查,结合 composer.json 的 post-install-cmd 和 post-update-cmd 脚本实现钩子自动安装,确保团队提交的代码符合标准,防止不合规代码进入版本库。

使用 CaptainHook 和 Composer 来强制执行代码规范,是一种在项目开发过程中自动检查和阻止不符合规范的代码提交的有效方式。它通过 Git 钩子(hooks)在关键操作(如 commit 或 push)时触发检查,确保团队成员提交的代码始终符合约定标准。
安装 CaptainHook
首先需要将 CaptainHook 作为开发依赖添加到项目中:
- 运行命令:composer require --dev captainhook/captainhook
- 安装完成后,初始化配置文件:在项目根目录执行 ./vendor/bin/captainhook install,这会创建一个默认的 captainhook.json 配置文件
配置代码规范检查
假设你使用 PHP_CodeSniffer 或 PHP-CS-Fixer 来规范代码风格,可以在 captainhook.json 中设置 pre-commit 钩子来运行这些工具:
{
"commit-msg": {
"enabled": false
},
"pre-commit": {
"enabled": true,
"actions": [
{
"action": "./vendor/bin/php-cs-fixer fix",
"options": ["--dry-run", "--using-cache=no"],
"triggered_by": ["php"]
}
]
}
}
说明:
- pre-commit 在 git commit 执行时触发
- action 指定要运行的命令,例如格式化检查
- --dry-run 确保不会自动修改文件,仅报告问题
- triggered_by 表示只对 .php 文件触发该检查
结合 Composer 脚本自动化安装
为了让所有开发者在执行 composer install 后自动安装钩子,可在 composer.json 中添加脚本:
"scripts": {
"post-install-cmd": "captainhook install",
"post-update-cmd": "captainhook install"
}
这样每次运行 composer install 或 update 时,CaptainHook 都会自动注册 Git 钩子,无需手动操作。
验证与调试
如果钩子未按预期工作,可以:
- 运行 ./vendor/bin/captainhook check 查看配置是否正确
- 使用 ./vendor/bin/captainhook -v install 查看详细输出
- 尝试手动执行配置中的命令(如 php-cs-fixer fix --dry-run),确认其能正常运行
基本上就这些。只要配置好工具链并统一团队的开发环境,就能有效防止不合规代码进入版本库。










