composer show --license 可直接列出所有 composer 依赖的 license 字段值,格式为 vendor/name version license,数据源自 composer.lock,稳定可复现;但不解析 license 文件、不校验 spdx 合法性,且对未声明 license 的包显示 unknown 或留空。

直接用 composer show --license 查所有依赖的许可证
不需要写脚本或额外工具,composer show 命令自带 --license 参数,能一次性列出所有已安装包及其声明的 license 字段值。这是最轻量、最可靠的起点——它读取的是 composer.lock 中记录的元数据,而非临时抓取远程信息,结果稳定可复现。
执行:
composer show --license输出格式为
vendor/name version license,比如:monolog/monolog 2.9.1 MIT<br>symfony/console 6.4.0 MIT<br>doctrine/annotations 1.15.0 MIT
- 注意:该命令只显示
composer.json中显式声明的license字段,不解析 LICENSE 文件内容,也不校验 SPDX 格式是否合法 - 如果某个包没填
license字段(值为空或dev),输出里会显示unknown或留空,这类必须人工核查 - 某些包用数组声明多个协议(如
["MIT", "BSD-3-Clause"]),composer show --license会合并显示为MIT, BSD-3-Clause,但不会自动判断兼容性
用 composer licenses 导出结构化 JSON 方便筛选
当项目依赖超过 50 个时,纯文本难快速定位风险协议(如 GPL、AGPL)。Composer 自带的 licenses 子命令可生成 JSON,字段明确,适合 grep 或导入 Excel 过滤:
composer licenses --format=json > licenses.json
生成的 JSON 每项含 name、version、license、homepage,例如:
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
{"name":"phpunit/phpunit","version":"10.5.1","license":"BSD-3-Clause","homepage":"https://phpunit.de/"}
-
--format=json是唯一支持的结构化输出,别信网上说的--format=csv—— 那是旧版插件功能,现代 Composer 不内置 - 若输出中某包的
license字段为null,说明其composer.json未声明协议,需立刻检查源码仓库根目录下的 LICENSE 文件 - JSON 不包含继承关系(比如 A 依赖 B,B 的协议是否被 A 的协议覆盖),合规判断仍需人工结合使用场景做法律分析
警惕 license 字段造假或过时(常见坑)
开源协议信息全靠维护者自觉填写,license 字段错误率不低。典型问题包括:
- 包实际采用 MIT,但
composer.json写成"license": "Apache-2.0"(曾见于早期guzzlehttp/psr7的某个 patch 版本) - 主仓库已升级到 MIT,但旧版本 tag 仍保留 GPLv2 声明,而
composer.lock锁定的恰好是那个旧版 - 私有包或 fork 包未修改
license字段,沿用上游值,但实际代码已混入 AGPL 修改
验证方法:对可疑包,手动访问其 composer.lock 中记录的 source.url 和 dist.reference(即 commit hash),打开对应 tag 的根目录,看真实 LICENSE 文件内容。别只信 composer show 输出。
非 Composer 包(如 npm、git submodules)不会出现在结果里
composer show --license 和 composer licenses 只扫描 vendor/ 下由 Composer 安装的包。如果你项目里还混用了:
- 通过
npm install引入的前端库(如lodash) - 用
git submodule嵌入的 C 扩展或工具链 - 手动下载解压到
lib/目录的二进制文件(如ffmpeg)
这些完全不会被计入结果。合规自查必须另起流程:npm 用 npm ls --depth=0 --license,submodule 需逐个进目录运行 cat LICENSE,二进制则查官网文档。Composer 的报告只是拼图的一块,不是全貌。










