composer show可直接导出所有已安装包清单;--tree显示完整依赖树(不含dev包、无锁定版本);--locked读取composer.lock获取精确快照;--format=json输出结构化数据供审计,需配合--dev才含开发依赖。

直接用 composer show 就能导出当前项目所有已安装包的清单,不需要额外插件或脚本。
导出完整依赖树(含嵌套依赖)
执行 composer show --tree 可以看到从根包开始逐层展开的依赖结构,适合排查版本冲突或理解依赖来源。但注意:这个命令输出的是树形文本,不能直接用于重装——它不包含锁定版本号,也不区分 require 和 require-dev。
- 若想导出可复现的精确依赖,优先用
composer show --locked(需先运行过composer install或composer update生成composer.lock) -
--tree在 CI 调试时有用,但不适合存档或交接 - 输出内容不含 license、description 等元信息,仅含包名与版本
导出扁平化包列表(带版本号,可用于审计)
最常用的是 composer show --format=json,它输出一个 JSON 数组,每项含 name、version、type、license 等字段。配合 jq 可快速提取关键信息:
composer show --format=json | jq -r '.[] | "\(.name) \(.version) \(.license // "N/A")'
这个命令会按行输出类似 monolog/monolog 2.10.0 MIT 的格式,适合粘贴进安全审计表或合规文档。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
-
--format=json默认只显示require包;加--dev参数才包含require-dev中的包 - JSON 输出不含依赖关系,只反映当前
vendor/下实际安装的包 - 如果
vendor/目录不存在,该命令会报错:Could not find package information for ...,此时需先运行composer install
导出 lock 文件中记录的精确版本(部署/审计刚需)
composer.lock 才是生产环境依赖的真实快照。直接读取它比调用命令更可靠,尤其当 vendor/ 被清理后:
jq -r '.packages[] | "\(.name) \(.version)"' composer.lock
这条命令能绕过 composer show 对 vendor/ 的依赖,只要 composer.lock 存在就能跑。
-
.packages是正式依赖;如需开发依赖,查.packages-dev - 注意
version字段值末尾带+no-version-set表示该包是 path repo 或未打 tag 的本地仓库,需人工确认 - 别用
cat composer.lock | grep name这类正则粗筛——lock 文件是 JSON,结构敏感,容易漏字段或误匹配注释
真正要确保可重现,不是看“装了什么”,而是看“composer.lock 里锁了什么”。很多人导出后没核对 --dev 开关或忽略 lock 文件缺失场景,结果清单和实际部署不一致。










