composer show 默认不显示许可证信息,需用 composer show --format=json 配合 jq 提取,或使用专用命令 composer licenses;二者均仅读取 composer.json 中的 license 字段,不校验实际 license 文件。

composer show 能直接列出所有依赖,但默认不带许可证信息
想快速看项目用了哪些包,composer show 是最常用命令。它按字母顺序列出所有已安装的包及其版本,但默认只显示名称和版本号,不包含 license 字段。
常见错误是以为加 --tree 或 -s 就能出许可证——其实不行。真正要带许可证,得用 --format=json 配合外部工具(比如 jq),或者换用 composer licenses。
-
composer show:适合人工快速浏览,支持--direct(只看根依赖)、--platform(只看 PHP 扩展)等过滤参数 -
composer show vendor/package:查单个包详情,这时会显示license字段(如果 composer.json 里写了) - 注意:
show不解析实际 LICENSE 文件内容,只读取composer.json中的license字段值,可能为空或写成MIT这类缩写
composer licenses 是导出许可证的专用命令,但输出格式有限
composer licenses 是唯一原生支持批量提取许可证信息的命令,但它只输出纯文本表格,列名固定为 name、version、license,不支持 JSON 或 CSV。
容易踩的坑是:它默认只显示「有明确 license 声明」的包;如果某个包的 composer.json 里没写 license 字段,那行就直接被跳过,不会显示 unknown 或空值。
- 加
--format=markdown可生成 Markdown 表格,方便贴进文档 - 加
--no-dev排除开发依赖,避免把phpunit这类工具包也列进来 - 它不检查实际 LICENSE 文件是否存在或是否匹配声明,纯属读元数据——所以别指望靠它做合规审计
想导出完整文本列表(含缺失 license 的包),得组合 show + jq
如果必须覆盖所有包、统一格式、且允许缺失值占位,composer show --format=json 是更可控的起点。它输出完整依赖树的 JSON,字段齐全,包括 license(可能为 null)。
用 jq 提取并格式化,比手写脚本或改 Composer 插件快得多:
composer show --format=json | jq -r '.packages[] | "\(.name)\t\(.version)\t\(.license // "unknown")'
上面这行会输出 tab 分隔的三列:包名、版本、license(空则填 unknown)。你可以用 > 重定向到文件,再用 Excel 或 column -t 对齐。
-
jq必须安装,Windows 用户可用composer global require symfony/console?不,那是错的——得单独装jq(官网二进制或choco install jq) -
.packages是稳定字段,但.packages-dev不在同一个 JSON 里;如需含 dev 包,得两次调用show --dev --format=json再合并 - 注意:JSON 输出不含平台包(如
ext-curl),它们不在.packages数组里
licenses 命令不校验实际 LICENSE 文件,别把它当法律依据
很多人导出列表是为了合规审查,但得清楚:composer licenses 和 composer show 都只读 composer.json 元数据,不扫描项目里的 LICENSE、LICENSE.md 或源码头部注释。
比如某包声明 "license": "MIT",但实际没放 LICENSE 文件,或放的是修改版条款——这两个命令都发现不了。
- 真要审计,得配合
license-checker这类工具,它会下载源码、解压、找 LICENSE 文件并比对内容 - Composer 自身不提供「许可证一致性校验」能力,连 warning 都不抛
- 导出的文本只是起点,不是终点;尤其在金融、政企场景,光靠这个列表交差风险很大










