composer-normalize 能自动统一 composer.json 格式,解决团队格式不一致问题;需正确安装 vaimo/composer-plugin 插件、使用 composer 2.x、配置 $path,并通过 --dry-run 在 ci 和 git 钩子中验证合规性。

composer-normalize 能立刻解决团队里 composer.json 格式不一致的问题,不需要争论字段顺序、缩进空格或要不要末尾逗号——跑一次命令,所有人文件自动对齐。
安装后为什么执行 composer normalize 没反应?
常见错误现象是命令执行后无输出、无修改,甚至报 Command "normalize" is not defined。根本原因只有两个:
- 插件没装对:全局安装应运行
composer global require vaimo/composer-plugin(不是composer-normalize包本身);本地安装则用composer require --dev vaimo/composer-plugin - Composer 版本冲突:该插件仅兼容 Composer 2.x。运行
composer --version确认输出类似2.7.6,若为1.x必须先升级 - 全局插件 bin 路径未加入
$PATH:执行composer global config home查出路径,把其下的bin/加入环境变量
如何在 CI 中可靠地检查格式合规?
CI 不需要改文件,只做验证。关键在于用对参数和退出码:
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 必须用
composer normalize --dry-run:它成功时返回 0,有差异时返回 1,CI 可据此中断流程 - 不要混用
--diff:它输出文本差异但始终返回 0,CI 无法判断是否“已规范” - 推荐写法:
composer normalize --dry-run && echo "✅ OK" || (echo "❌ composer.json needs formatting"; exit 1) - 搭配 Git 钩子更早拦截:在
.git/hooks/pre-commit里放同样命令,成员提交前就卡住
自定义缩进、字段排序等规则怎么生效?
规则靠项目根目录的 composer-normalize.json 文件控制,不是改插件源码或命令行参数:
- 配置项必须是合法 JSON,且文件名不能拼错(注意是
composer-normalize.json,不是normalize.json或.json) - 常用配置示例:
{ "indent": 2, "sort-keys": true, "trailing-comma": true, "skip-sorting": ["scripts", "require-dev"] } - 改完配置必须重新运行
composer normalize才会应用,不会自动监听文件变化 -
"skip-sorting"是唯一推荐手动调整的项:scripts保持手写顺序更易读,require-dev有时需按依赖关系排列
monorepo 里多个 composer.json 怎么批量处理?
插件原生不支持通配符或递归扫描,得靠 shell 配合:
- 最简方式:
find . -name 'composer.json' -not -path './vendor/*' -exec composer normalize {} \; - 想预览改动?把
composer normalize换成composer normalize --dry-run,但注意:它对每个文件单独执行,只要任一文件不规范就返回非 0,适合 CI - 避免误处理:加
-not -path './vendor/*'排除 vendor 下的子包,否则可能破坏第三方包结构 - 性能提示:大量文件时,
find ... -print0 | xargs -0 -I{} composer normalize {}比-exec更快
真正容易被忽略的是:团队第一次运行 composer normalize 后,所有人的 git diff 会巨量刷屏——这不是 bug,是格式校正的必然结果。建议选一个低峰时段统一执行,并同步更新 composer-normalize.json 和 pre-commit 钩子,否则下次提交又得手动处理几十个冲突。










