Composer无licenses命令,查License需用composer show或info(二者等价);show支持单包、通配符及--all配合grep/paste或PowerShell提取,但仅限已安装包,且license字段需人工核对实际许可证文本。

Composer 没有内置的 composer licenses 命令,直接运行会报错:Command "licenses" is not defined.。想查已安装包的 License 信息,得用其他方式组合实现。
用 composer show 查单个包的 License
这是最直接、最可靠的方式,适用于确认某个关键依赖是否符合项目合规要求。
-
composer show vendor/package-name会输出该包的完整元数据,其中license字段即授权类型(如MIT、GPL-2.0-or-later) - 若包未声明 license,字段可能为空或显示
proprietary,需人工核查其composer.json或源码仓库 - 支持通配符:例如
composer show monolog/*可批量查看所有 monolog 相关包
用 composer show --all 导出全部包并过滤 license
适合做一次性合规扫描,但输出冗长,需配合 shell 工具提取关键字段。
- Linux/macOS 下可这样快速提取:
composer show --all | grep -E '^(name|license):' | sed 's/^name: //; s/^license: //; /^$/d' | paste -d' → ' - -
- Windows PowerShell 用户可用:
composer show --all | Select-String -Pattern "name:|license:" | ForEach-Object { $_.Line.Trim() } | % { if ($_ -match 'name: (.+)') { $n=$matches[1] } elseif ($_ -match 'license: (.+)') { "$n → $matches[1]" } } - 注意:
--all包含 require-dev 里的包,生产环境部署前建议加--no-dev
用 composer info 替代 show?
composer info 是 composer show 的别名,行为完全一致,无额外功能。不要误以为它能“智能汇总 license”——它只是更短的写法。
- 两者都只查本地
vendor/中已安装的包,不查 lock 文件里未安装的条目 - 若
vendor/被清理过,必须先composer install才能查到 license - 某些包的 license 字段写得不规范(比如填了 URL 而非 SPDX 标识符),需人工核对
License 信息本质来自每个包的 composer.json 中的 license 字段,Composer 不做校验也不自动解析 SPDX 含义。真正影响法律风险的是实际代码中声明的许可证文本(如 LICENSE 文件),而非 composer.json 里那一行字符串。










