真正能列出所有依赖许可证的命令是 composer show –licenses,它遍历 vendor 目录输出每个已安装包的名称、版本和 license 字段值,支持 –no-dev 和 –format=json 等参数。
composer licenses 命令到底显示谁的许可证?
它只显示你当前项目的顶层 composer.json 里写的 "license" 字段,比如 myapp/myproject → MIT —— 跟 vendor 里的任何依赖都无关。这不是 bug,是设计如此。很多人一跑 composer licenses 就以为“全量依赖许可证扫完了”,结果法务审核时才发现漏了一堆。
真正能列出所有依赖许可证的命令是哪个?
用 composer show --licenses。它会遍历整个 vendor/ 目录,输出每个已安装包的名称、版本和 license 字段值(如 MIT、Apache-2.0、["BSD-3-Clause", "GPL-2.0"])。
- 加
--no-dev可排除开发依赖,适合发布前审计 - 加
--format=json方便脚本解析,但注意字段可能为空或为 URL - 不加参数时默认含
require-dev,别误以为“生产环境没这包”就忽略
license 字段靠不靠谱?为什么还得看 LICENSE 文件?
非常不靠谱。常见问题包括:"license": "https://github.com/foo/bar/LICENSE"(填了链接不是 SPDX 标识符)、"license": ["MIT", "proprietary"](多许可并存需人工判断)、甚至字段为空但根目录有 LICENSE.md。SPDX 不校验,Composer 也不强制填。