composer show 是唯一开箱可用、不依赖插件的许可证信息获取方式,需先执行 composer install/update,读取 vendor/ 中已安装包的 composer.json license 字段,支持单包查询与 JSON+json 批量导出,但不处理传递依赖、不校验 LICENSE 文件内容,多许可、URL、空值、proprietary 等须人工核查。

别指望 composer licenses 命令能自动搞定合规检查——它在绝大多数 Composer 环境里根本不存在,运行必报 Command "licenses" is not defined.。真正开箱可用、不依赖插件、结果可追溯的起点只有一个:composer show,但必须先完成 composer install 或 composer update。
怎么用 composer show 查单个包的 license 字段
这是最轻量、最可靠的源头信息获取方式,读的是 vendor/ 下已安装包的 composer.json 内容,不联网、不解析 LICENSE 文件、不归一化字符串。
-
composer show monolog/monolog输出中直接带license行,值可能是MIT、["MIT", "Apache-2.0"]、SEE LICENSE IN LICENSE.md或空 - 遇到
proprietary、unlicensed、空值,必须立刻标记,不能跳过 - 字段值为 URL(如
"https://example.com/LICENSE")时,composer show不会下载或校验,你得手动访问并核对全文 - 不处理传递依赖:像
symfony/polyfill-intl-idn这种子依赖,即使被装进vendor/,也不会出现在composer show monolog/monolog的输出里
怎么批量导出顶层依赖的许可证清单(CI 可用)
人工一个一个查不现实,CI 流程需要结构化、可管道处理的数据。唯一稳定路径是 JSON + jq,不依赖插件,也不要求 Composer 版本高于 2.2。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 先确保已执行
composer install,否则vendor/为空,命令报Package not found - 导出全部顶层依赖(不含
require-dev):composer show --no-dev --format=json | jq -r '.packages[] | "\(.name)\t\(.version)\t\(.license // ["unknown"] | join(" | "))"' - 支持通配符:
composer show monolog/* --format=json可一次覆盖整个组织下的包 - 避免用
grep或awk解析文本输出——多 license 场景(如数组)、换行、空格都会导致错行漏项
为什么不能只信 license 字段?哪些值必须人工翻源码
这个字段是作者自由填写的字符串,Composer 不校验、不标准化、不下载验证。法律审核认的是源码仓库根目录下 LICENSE 或 LICENSE.md 的实际内容。
-
"MIT License"和"The MIT License"都不是 SPDX 有效标识符,只有MIT才被合规工具识别 -
"SEE LICENSE IN LICENSE.md"类条目,composer show绝不会打开文件,你得进对应包的 GitHub/GitLab 仓库,点开根目录LICENSE.md全文比对 -
["MIT", "GPL-3.0"]这类多许可声明,没说明是“二选一”还是“同时满足”,必须查原始仓库文档或 issue 讨论确认适用条件 - 私有 fork(如
"repositories": [{"type": "vcs", "url": "git@"}])常无license字段,composer show显示unknown,必须手动审计
想覆盖传递依赖和模糊值?只能靠插件,但有硬限制
原生命令无法递归扫描子依赖,也无法尝试读取实际 LICENSE 文件。目前最稳的第三方方案是 zicht/composer-license-plugin,但它不是万能补丁。
- 安装:
composer require --dev zicht/composer-license-plugin - 导出:
composer licenses --format=json > licenses.json,它会递归扫描所有依赖(含require-dev),并把"The MIT License"归一化为MIT - 对
"SEE LICENSE IN LICENSE.md",它会尝试读取该文件内容并匹配 SPDX ID(如MIT或GPL-3.0-only) - 但它默认跳过私有仓库(
vcs类型),这类包仍需人工翻源码;且插件本身不判断 GPL 传染性是否触发——这取决于你的部署方式(SaaS?分发二进制?),命令行算不出来
真正麻烦的永远是那些没填 license 字段却在生产环境跑着的包,或者写了 proprietary 却没附内部审批记录的私有组件——自动化工具筛不出这些,只能靠人盯。

















