Composer 没有 licenses 命令,官方至今未实现;应使用 composer show --licenses 获取许可证元数据,并人工核对 vendor/ 中各包的 LICENSE 文件原文以确保合规。

没有 composer licenses 命令,别再试了——它根本不存在。 所有看到“Command 'licenses' is not defined”报错的,不是你装错了,是 Composer 官方至今(2026 年 9 月)没实现这个命令。想生成许可证合规报告,必须用真正可用的原生命令 + 人工核对组合。
用 composer show --licenses 获取基础元数据
这是唯一稳定、无需插件、全版本兼容的原生方式:
- 必须先执行
composer install或composer update,否则vendor/为空,命令直接失败 - 加
--no-dev排除require-dev包(如phpunit/phpunit),避免把测试工具的 MIT 当成生产依赖 -
license字段值可能是字符串("MIT")、数组(["MIT", "Apache-2.0"])或 URL("SEE LICENSE IN LICENSE.md")——Composer 不做归一化,也不校验内容 - JSON 输出用
--format=json,顶层是数组,解析时直接用.[].name和.[].license,别误以为有.packages字段
为什么 license 字段不能当法律依据
它只是作者填的元数据,不是 LICENSE 文件本身:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 填
"MIT"✅ 不代表合规;若项目根目录没标准 MIT 文本,或填的是"The MIT License"❌,SPDX 工具会标红 -
"license": ["MIT", "proprietary"]表示多许可并存,你实际用了哪条?得看集成方式和分发形态 -
"license": "SEE LICENSE IN LICENSE.md"——composer show绝不会打开该文件,你得手动点开核对全文 - 空值、
"unlicensed"、"proprietary"必须立刻标记,它们意味着法律盲区,不能靠“大概率是 MIT”跳过
真正落地的合规审计必须人工介入 LICENSE 文件
自动化工具只帮你筛,不替你担责:
- 推荐
aquasecurity/composer-license-checker:能递归扫描、标准化 SPDX ID、识别常见变体(如"MIT"vs"MIT-0") - 或
comcast/php-legal-licenses:支持导出 CSV 报告,方便法务团队交叉审核 - 所有工具输出的“许可证类型”,都必须回溯到对应包的
vendor/{vendor}/{package}/LICENSE(或LICENSE.md)原文比对 - 特别注意被
replace或provide的包——它们可能没composer.json,但代码里实际用了,LICENSE 文件也得查源仓库
最容易被忽略的一点:任何命令或工具输出的 license 字段,都不等于法律意见。合规底线是——你得亲眼确认每个生产依赖的真实 LICENSE 文件存在、内容完整、与分发方式匹配。

















