Composer 2.5.0+ 内置 composer format,安全美化 composer.json:保留字段顺序、注释和 key 位置,仅规范缩进、空行、引号与末尾逗号;而 jq 或 python -m json.tool 会重排键、删注释、破坏语义,导致 diff 爆炸与行为异常。

Composer 2.5.0+ 已原生支持 composer format,不用装插件、不依赖 jq 或 python -m json.tool,就能安全美化 composer.json —— 缩进、空行、引号、末尾逗号全按官方规范重排,且**不改变字段顺序、不删注释、不重排 key**。
为什么别用 jq 或 python -m json.tool 格式化 composer.json
它们把 composer.json 当纯 JSON 处理,但实际它不是:字段顺序影响行为(比如 scripts 执行顺序)、注释虽被忽略但对人有用、某些插件靠原始 key 位置做 hook。常见后果:
-
jq -S '.' composer.json会强制按键名排序,把"name"推到最前,"autoload"挤到中间,git diff 爆炸 -
python -m json.tool在 Windows 上默认用系统编码读取,可能乱码;且一律删注释、压平多行scripts,可读性归零 - 两者都用双引号重写所有字符串,哪怕你原来写的是
"php": "^8.1",输出后换行/空格微变,diff 里全是噪音
composer format 怎么用才不踩坑
它从 Composer 2.5.0 起内置,行为克制、语义安全。关键点:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 先确认版本:
composer --version,低于2.5.0必须composer self-update - 基础用法:
composer format(默认处理当前目录composer.json) - 预览改动不写入:
composer format --dry-run,返回 0 表示已规范,非 0 表示有差异 - 指定路径:
composer format /path/to/composer.json,支持多个路径 - CI 中校验格式是否合规,推荐写法:
composer format --dry-run && echo "✅ OK" || (echo "❌ composer.json needs formatting"; exit 1)
团队想统一字段顺序和缩进?用 composer-normalize
composer format 不动字段顺序,只修格式;若需强制统一顺序(如 name→description→require→autoload),得靠 vaimo/composer-plugin 提供的 composer normalize 命令。注意安装方式:
- 全局安装:
composer global require vaimo/composer-plugin(不是composer-normalize包) - 必须 Composer 2.x,
composer --version输出带2.开头才有效 - 配置靠项目根目录的
composer-normalize.json(名字不能错),例如控制缩进为 2 空格、require在require-dev前 - CI 验证只用
--dry-run,别混用--diff(它总返回 0,CI 判不了)
真正难的不是格式化动作本身,而是让所有人默认走同一套工具链 —— composer format 适合日常维护,composer normalize 适合强约束团队;一旦混用,或者有人手改完又跑 jq,git diff 就变成猜谜游戏。

















