Composer 本身不提供自动格式化 composer.json 的功能,但可通过配置 scripts 钩子调用 jq 或 PHP 脚本实现自动美化:jq 方案需安装 jq 并在 scripts 中定义 format-json 及 post-update-cmd/post-require-cmd;PHP 方案则用纯脚本解析并重写 JSON,适配无 jq 环境。

Composer 本身不提供自动格式化 composer.json 的功能,但可以通过配置 scripts 钩子,在 require 或 update 后自动调用 JSON 格式化工具(如 jq 或 PHP 自带的 json_encode)来美化文件。
使用 jq 工具自动格式化(推荐)
jq 是轻量、可靠且跨平台的 JSON 处理命令行工具,适合做格式化。确保已安装:
Linux/macOS:可通过包管理器安装(如 brew install jq 或 apt install jq);
Windows:可用 官方二进制 或通过 WSL 安装。
在 composer.json 的 "scripts" 段中添加:
"scripts": {
"format-json": "jq '.' composer.json > composer.json.tmp && mv composer.json.tmp composer.json",
"post-update-cmd": "@format-json",
"post-require-cmd": "@format-json"
}
这样每次运行 composer update 或 composer require xxx 后,都会自动重写并缩进 composer.json。
用 PHP 脚本实现零依赖格式化
如果无法安装 jq(例如某些 CI 环境),可用纯 PHP 实现:
- 新建脚本
bin/format-composer-json.php:
- 在
composer.json中配置:
"scripts": {
"format-json": "php bin/format-composer-json.php",
"post-update-cmd": "@format-json",
"post-require-cmd": "@format-json"
}
注意事项与常见问题
格式化不会改变内容语义,但要注意:
- 确保
composer.json语法合法,否则格式化会失败(jq或json_decode会报错) - Git 提交时建议忽略格式化引起的空格/换行差异,可配置
.gitattributes统一换行符 - 若项目使用
composer.lock,格式化composer.json不会影响 lock 文件,但下次update会基于新格式重新生成 - 避免在
post-install-cmd中执行格式化——因为首次install时可能还没有vendor/autoload.php,而某些脚本依赖它
基本上就这些。用 jq 最简单,用 PHP 脚本最稳妥,两者都能让 composer.json 始终保持整洁易读。










