composer show vendor/package-name 是唯一不依赖插件、不联网、不解析文件的可靠方式,输出 vendor/ 中已安装包 composer.json 的 license 字段值,但需先执行过 install/update,且不处理传递依赖和 license 文件内容。

composer show 是唯一能用的原生命令,但它只读 vendor/ 里的 composer.json
运行 composer show vendor/package-name 是当前唯一不依赖插件、不联网、不解析文件的可靠方式。它输出的是已安装包本地 composer.json 中的 license 字段值,不是 Packagist 缓存,也不是推测结果。
但必须满足两个前提:
- 已执行过
composer install或composer update,否则vendor/为空,命令报Package not found - 只查显式声明在
composer.json的包,symfony/polyfill-intl-idn这类传递依赖完全不会出现
字段值照搬不处理:遇到 "license": "SEE LICENSE IN LICENSE.md",它绝不会打开文件;遇到空值、"proprietary"、"unlicensed",它也不会警告——你得自己盯住这些信号。
别在 CI 里写 composer licenses —— 它根本不存在
截至 2026 年 6 月,Composer 官方未内置 licenses 命令。直接运行会得到明确错误:Command "licenses" is not defined. 这不是环境问题,是功能压根没实现。
如果你在文档或脚本里看到 composer licenses,它实际依赖第三方插件(最常见的是 zicht/composer-license-plugin)。没装插件却写进 CI?构建直接失败,不是 warning,是 fatal error。
可行替代方案只有两种:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 用
composer show --format=json | jq ...提前导出结构化数据,适合 CI 早期阶段卡点 - 用
jq -r '.packages[] | "\(.name)\t\(.version)\t\(.license // ["unknown"] | join(" | "))"' composer.lock直接解析composer.lock,不依赖vendor/,但 license 字段可能为空或为 URL,需人工确认
zicht/composer-license-plugin 是目前覆盖最全的批量方案
当需要递归扫描所有依赖(含 require-dev 和传递依赖)、标准化模糊 license 值、并尝试匹配实际 LICENSE 文件内容时,zicht/composer-license-plugin 是当前最稳的选择。
安装与使用很简单:
- 安装:
composer require --dev zicht/composer-license-plugin - 导出 JSON:
composer licenses --format=json > licenses.json - 查 GPL 类风险:
jq -r '.[] | select(.license | test("GPL|AGPL|LGPL"; "i")) | "\(.name) \(.version) \(.license)"' licenses.json
它能把 "The MIT License" 归一为 MIT,把 "SEE LICENSE IN LICENSE.md" 替换为实际匹配到的 SPDX ID(如 MIT 或 GPL-3.0-only);但注意:它默认跳过私有仓库(如 "repositories": [{"type": "vcs", "url": "git@"}]),这类依赖得先 composer archive 导出再人工审计。
license 字段只是元数据,不是法律凭证
看到 "license": "MIT" 不代表合规。这个字段由包作者自由填写,无强制校验,也不保证与实际 LICENSE 文件内容一致。典型陷阱包括:
-
"MIT License"或"The MIT License"是无效 SPDX 标识符;合规工具只认MIT -
"SEE LICENSE IN LICENSE.md"必须手动打开对应包的LICENSE.md全文核对——composer show绝不会帮你读 - 声明
["MIT", "GPL-3.0"]没说明是“二选一”还是“同时满足”,得查原始仓库才能确认适用条件 -
GPL-2.0-only和GPL-2.0-or-later法律效力完全不同,但所有 Composer 命令都不区分、不提示、不校验
真正有法律效力的是 LICENSE 文件内容本身,以及你的实际部署方式(比如 SaaS 是否触发 GPL 传染性条款)——这部分永远绕不开人工判断。

















