如何编写一个composer脚本来自动执行代码格式化(如PHP-CS-Fixer)?

发布时间 - 2025-11-14 00:00:00    点击率:
通过 Composer 集成 PHP-CS-Fixer 可自动格式化代码,首先安装工具为开发依赖,接着在项目根目录配置 .php-cs-fixer.dist.php 定义规则,然后在 composer.json 中添加 scripts,如 "format" 手动执行格式化,"post-install-cmd" 和 "post-update-cmd" 在安装或更新依赖后自动触发格式化,推荐使用 vendor/bin/php-cs-fixer 确保路径一致,还可设置 "check-format" 脚本用于 CI 环境中检测格式问题而不修改文件,从而统一团队代码风格并融入日常开发流程。

要在 Composer 中自动执行代码格式化(如使用 PHP-CS-Fixer),你可以通过定义脚本钩子,在执行 Composer 命令时自动触发格式化工具。以下是具体实现步骤。

安装 PHP-CS-Fixer

推荐将 PHP-CS-Fixer 作为项目依赖或开发依赖安装,确保团队成员环境一致:

composer require --dev friendsofphp/php-cs-fixer

这会把工具安装到 vendor/bin 目录下,可通过 ./vendor/bin/php-cs-fixer 调用。

配置 PHP-CS-Fixer 规则

在项目根目录创建 .php-cs-fixer.dist.php 文件,定义代码规范:

// .php-cs-fixer.dist.php
$finder = PhpCsFixer\Finder::create()
    ->in(__DIR__ . '/src')
    ->in(__DIR__ . '/tests');

return PhpCsFixer\Config::create()
    ->setRules([
        '@PSR12' => true,
        'array_syntax' => ['syntax' => 'short'],
        'no_unused_imports' => true,
    ])
    ->setFinder($finder);

这个配置会针对 srctests 目录应用 PSR-12 等规则。

在 composer.json 中定义脚本

编辑 composer.json,添加自定义脚本和钩子:

"scripts": {
    "format": "php-cs-fixer fix",
    "post-update-cmd": "php-cs-fixer fix",
    "post-install-cmd": "php-cs-fixer fix"
}

说明:

  • format:手动运行格式化:composer format
  • post-install-cmdpost-update-cmd:每次执行 composer installcomposer update 后自动格式化代码

如果全局未安装 php-cs-fixer,建议改用 vendor 路径:

"scripts": {
    "format": "vendor/bin/php-cs-fixer fix",
    "post-install-cmd": "vendor/bin/php-cs-fixer fix"
}

可选:仅检查不修复

若只想在 CI 环境中检查格式问题,可添加一个只检测的命令:

"scripts": {
    "check-format": "vendor/bin/php-cs-fixer fix --dry-run --diff"
}

这个命令不会修改文件,但会输出哪些文件不符合规范,适合集成到 Git Hooks 或 CI/CD 流程中。

基本上就这些。通过 Composer 脚本集成 PHP-CS-Fixer,能有效保证团队代码风格统一,且无需额外配置即可在常规开发流程中自动执行。


# php  # js  # git  # json  # composer  # 工具  # 代码规范  # format  # require  # 你可以  # 推荐使用  # 要在  # 而不  # 可在  # 自定义  # 只想  # 可选  # 不符合  # 还可 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)  如何用y主机助手快速搭建网站?  如何快速上传建站程序避免常见错误?  详解CentOS6.5 安装 MySQL5.1.71的方法  如何正确选择百度移动适配建站域名?  Laravel怎么调用外部API_Laravel Http Client客户端使用  JavaScript如何实现路由_前端路由原理是什么  Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转  如何在阿里云高效完成企业建站全流程?  如何在Windows服务器上快速搭建网站?  智能起名网站制作软件有哪些,制作logo的软件?  javascript日期怎么处理_如何格式化输出  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  JS中对数组元素进行增删改移的方法总结  Laravel如何使用Blade模板引擎?(完整语法和示例)  Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全  JS经典正则表达式笔试题汇总  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】  微信小程序 wx.uploadFile无法上传解决办法  Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】  使用PHP下载CSS文件中的所有图片【几行代码即可实现】  大型企业网站制作流程,做网站需要注册公司吗?  Laravel怎么在Controller之外的地方验证数据  ,怎么在广州志愿者网站注册?  如何在云主机上快速搭建网站?  如何注册花生壳免费域名并搭建个人网站?  Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解  Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】  如何用PHP快速搭建CMS系统?  WordPress 子目录安装中正确处理脚本路径的完整指南  焦点电影公司作品,电影焦点结局是什么?  详解Android——蓝牙技术 带你实现终端间数据传输  Android GridView 滑动条设置一直显示状态(推荐)  Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)  谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程  php结合redis实现高并发下的抢购、秒杀功能的实例  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出  如何快速选择适合个人网站的云服务器配置?  如何在阿里云完成域名注册与建站?  Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言  Laravel如何保护应用免受CSRF攻击?(原理和示例)  Laravel如何处理异常和错误?(Handler示例)  如何在宝塔面板创建新站点?  如何快速建站并高效导出源代码?  Laravel如何实现API资源集合?(Resource Collection教程)  公司网站制作价格怎么算,公司办个官网需要多少钱?  如何在Windows虚拟主机上快速搭建网站?  Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询