Composer 不支持 --format=json,唯一官方机器可读输出是 composer list --raw,返回纯文本命令列表,可用 shell 或脚本转为 JSON;需带描述则须解析默认输出并处理对齐问题。

composer list --format=json 不起作用
Composer 本身不支持 --format=json 这类参数。运行 composer list --format=json 会报错:「Unrecognized option: --format」。这是常见误解,源于把其他 CLI 工具(如 docker 或 wp-cli)的输出格式习惯套用到了 Composer 上。
用 composer list --raw 获取结构化纯文本列表
composer list --raw 是唯一官方支持的“机器可读”输出方式,它返回每行一条命令的纯文本,不含颜色、缩进或描述,适合后续解析:
about archive browse cache-clean cache-clear ...
你可以用 shell 管道转成 JSON,例如:
composer list --raw | awk '{print "\"" $0 "\""}' | paste -sd, - | sed 's/^/[/' | sed 's/$/]/'结果是:["about","archive","browse","cache-clean","cache-clear",...]
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 注意
--raw不包含命令描述,只含命令名(含命名空间,如dump-autoload) - 该输出不区分全局/本地插件命令,只要当前环境能识别就会列出
- 在 CI 脚本中用
--raw+awk/jq解析比正则匹配composer list默认输出更可靠
想导出带描述的完整命令清单?只能自己解析默认输出
Composer 默认的 composer list 输出是人工阅读友好型格式,含命令名、简短描述、缩进对齐,但没有结构化分隔符。要提取「命令名 + 描述」并转为 JSON,需处理两列对齐问题:
常见错误是直接按空格分割——因为描述里也有空格,且命令名长度不一,列边界不固定。
- 推荐用
awk按至少两个及以上空格作为字段分隔符:composer list | awk -F'[[:space:]]{2,}' 'NF>=2 {gsub(/^[[:space:]]+|[[:space:]]+$/, "", $1); gsub(/^[[:space:]]+|[[:space:]]+$/, "", $2); print "{\"command\":\"" $1 "\",\"description\":\"" $2 "\"}"}' - 若需完整 JSON 数组,建议用 Python 或 Node.js 脚本处理,避免 shell 中引号和转义翻车
-
composer list -a会显示所有命令(含隐藏命令),但格式相同,解析逻辑不变
别依赖 vendor/bin/composer 的版本差异
不同 Composer 版本(v1 vs v2 vs v3)对 --raw 的行为一致,但默认 list 输出的列宽、是否显示分组标题(如 Global Commands:)有差异。这意味着靠字符串匹配来提取命令的脚本,在升级 Composer 后容易断裂。
- v2+ 默认输出中命令名右对齐、描述左对齐,中间用可变空格连接;v1 更紧凑
- 始终优先用
--raw,除非你明确需要描述字段 - 如果项目必须生成文档级命令清单,建议在 CI 中固定 Composer 版本(如
COMPOSER_VERSION=2.5.8),再配合解析脚本
真正稳定的方式不是“导出 JSON”,而是接受 Composer 没有原生 JSON 输出的事实,用 --raw 做基础,按需补全元信息——比如从 composer.json 的 scripts 或插件源码里提取描述。

















