composer licenses 命令不存在,composer show 是唯一原生命令,读取已安装包 composer.json 中的 license 字段,不联网、不解析 license 文件;需先执行 composer install/update,支持通配符、--no-dev 和 --format=json 等用法,但字段值未经校验或归一化,不可直接作为法律依据。

composer licenses 命令根本不存在,运行即报错 —— 别在 CI 脚本或文档里写它,那是无效操作。
composer show 是唯一可用的原生命令
它读取的是 vendor/ 下已安装包的 composer.json 中 license 字段,不联网、不依赖插件、不解析 LICENSE 文件,结果最稳定。但前提是必须先执行过 composer install 或 composer update,否则 vendor/ 为空,composer show monolog/monolog 会直接报 Package not found。
常见使用方式包括:
-
composer show monolog/*:用通配符批量查看某组织下所有包的 license 声明 -
composer show --no-dev --format=json:排除require-dev包,输出结构化 JSON,适合后续用jq处理 -
composer show vendor/package-name:查单个包时最权威,字段值原样来自本地vendor/,不是 Packagist 缓存
注意:license 字段可能是空、"proprietary"、"SEE LICENSE IN LICENSE.md",甚至数组如 ["MIT", "Apache-2.0"] —— composer show 全部照搬,不做归一化,也不提示歧义。
别把 license 字段当法律凭证
这个字段由包作者自由填写,Composer 不校验真实性。你看到 "license": "MIT",不代表项目根目录真有合规的 MIT 声明文本,也不代表没混入 GPL 片段。
典型陷阱有:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 写成
"MIT License"或"The MIT License":SPDX 官方不认,合规工具会标红;合法标识符只有"MIT" - 字段值为
"SEE LICENSE IN LICENSE.md":composer show绝不会自动读取该文件,你得手动打开对应包的LICENSE.md核对全文 - 声明
["MIT", "GPL-3.0"]:没说明是“二选一”还是“同时满足”,必须查原始仓库的 LICENSE 文件才能确认适用条件 - 私有包填
"proprietary"却无内部审批记录:法律盲区,不能靠“大概率是 MIT”跳过
真正有法律效力的是 LICENSE 文件内容本身,不是 composer.json 里的字符串。
传染性风险(如 GPL)必须人工判断场景
composer show 输出含 "GPL-2.0-only" 或 "GPL-2.0-or-later",只是触发核查的信号,不是结论。前者禁止升级到 GPL-3.0,后者允许;两者对闭源项目的约束力完全不同,但 composer show 不区分、不提示、不校验。
是否触发传染,取决于你的实际使用方式:
- 动态链接 vs 静态链接
- SaaS 部署 vs 分发可执行包
- 是否修改并再分发该包代码
自动化命令无法回答这些问题。能做的只有:用 composer show --format=json | jq -r '.packages[] | select(.license | test("(?i)gpl|agpl|lgpl"))' 快速筛出疑似高风险包,然后逐个翻源码、查官网、找法务。
生产环境合规检查绕不开人
工具能发现明显问题,但以下三点必须人工介入:
- 确认第三方包是否真的按其声明许可证分发(比如 GitHub release assets 里有没有完整的 LICENSE 文件)
- 判断“动态链接”“SaaS 部署”等架构场景下,GPL/LGPL 是否实际触发 —— 这取决于你的系统设计,不是命令行能算出来的
- 审查供应商白名单是否覆盖当前版本号:
composer update后旧豁免可能失效,而composer show不会提醒你
最容易被忽略的是:很多团队把 composer show 当成终点,其实它连起点都算不上 —— 只是帮你快速圈出哪些包值得翻源码、查官网、找法务。










