Composer怎么安装PHP-CS-Fixer 代码格式化工具配置【教程】

10次阅读

全局安装php-cs-fixer需先将composer bin目录加入PATH,否则提示“command not found”;验证用php-cs-fixer –version;推荐全局开发、本地CI;配置文件为.php-cs-fixer.php,须设setFinder并exclude(‘vendor’);运行前必加–dry-run和–diff预览。

Composer怎么安装PHP-CS-Fixer 代码格式化工具配置【教程】

用 Composer 全局安装 php-cs-fixer

直接运行 composer global require friendsofphp/php-cs-fixer 即可,但前提是你的 ~/.composer/vendor/binlinux/macOS)或 %USERPROFILE%appDataRoamingComposervendorbinwindows)已加入系统 PATH。没加的话,命令会提示“command not found”,不是安装失败,而是找不到可执行文件。

验证是否生效:终端执行 php-cs-fixer --version。如果报错说找不到命令,别重装,先检查 PATH 是否包含 Composer 的 bin 目录。

本地项目安装 vs 全局安装的区别

项目级安装用 composer require --dev friendsofphp/php-cs-fixer,生成的二进制在 vendor/bin/php-cs-fixer。好处是版本锁定、团队一致;坏处是每次都要写相对路径或加 ./vendor/bin/php-cs-fixer,CI/CD 脚本里容易漏掉 ./vendor/bin/ 前缀。

全局安装更方便日常使用,但要注意:多个项目依赖不同版本时,全局只有一个版本,可能不兼容旧项目规则。建议主力开发用全局,CI 流水线用本地安装 + vendor/bin/php-cs-fixer 显式调用。

立即学习PHP免费学习笔记(深入)”;

  • 本地安装后,php-cs-fixer 不会自动注册为全局命令
  • 全局安装后,升级只需 composer global update friendsofphp/php-cs-fixer
  • --dev 参数必须加,它不是运行时依赖,只是开发工具

配置 .php-cs-fixer.php 文件常见写法

配置文件名必须是 .php-cs-fixer.php(注意开头的点),放在项目根目录。内容返回一个 PhpCsFixerConfig 实例,不是 jsON 或 YAML。

最简可用配置示例:

return PhpCsFixerConfig::create()     ->setRules([         '@PSR12' => true,         'array_syntax' => ['syntax' => 'short'],         'no_unused_imports' => true,     ])     ->setFinder(PhpCsFixerFinder::create()         ->in(__DIR__)         ->exclude('vendor')         ->name('*.php')     ) ;

注意点:

  • setFinder() 必须显式设置,否则默认只处理当前目录下的 PHP 文件,不会递归
  • exclude('vendor') 很关键,否则会尝试格式化第三方包,极慢且无意义
  • 规则名如 @PSR12 是预设集,array_syntax 是单条规则,参数结构要看官方文档对应规则页
  • 配置文件里不能用短数组语法 [] 如果项目 PHP 版本低于 5.4 —— 但你真还在用 PHP 5.4 以下?

运行 fix 时 –dry-run 和 –diff 参数别漏掉

首次在项目中运行前,务必先加 --dry-run 看哪些文件会被改、改多少行,避免误操作覆盖未提交的修改。加上 --diff 可以直接看到具体差异(类似 git diff),比纯统计更有用。

常用组合:

  • php-cs-fixer fix --dry-run --diff:预览改动
  • php-cs-fixer fix --verbose:显示每个文件的处理状态,卡住时能定位是哪个文件出问题
  • php-cs-fixer fix src/ --rules=@symfony:只处理 src/ 目录,且只启用 @Symfony 规则集

如果你发现某次 fix 后 git 提交了大量空格或换行变化,大概率是配置里没设 'line_ending' => "n" 或系统换行符和规则不一致,尤其 windowsmacOS 混合开发时。

text=ZqhQzanResources