composer show 是唯一可信的原生命令,但需已执行 composer install/update 且仅查显式声明包;ci 应直接解析 composer.lock;zicht/composer-license-plugin 可递归扫描并标准化许可证,但 license 字段非法律凭证,最终须人工核验 license 文件原文。

composer show 是唯一能信的原生命令,但必须满足两个前提
想靠 Composer 自己查清许可证?composer show vendor/package-name 是当前唯一不依赖插件、不联网、不解析文件的可信入口。但它不是万能钥匙,卡在两个硬条件上:
- 必须已执行过
composer install或composer update,否则vendor/为空,命令直接报Package not found - 只查
composer.json中显式声明的包,像symfony/polyfill-intl-idn这类传递依赖完全不会出现
字段值照搬输出:遇到 "license": "SEE LICENSE IN LICENSE.md",它绝不会打开文件;遇到空值、"proprietary"、"unlicensed",也不会警告——这些信号得你肉眼盯住。
CI 里别等 vendor 生成再查,直接 parse composer.lock
CI 流程不能等到 composer install 完成才启动合规检查。更早、更稳的做法是直接读 composer.lock:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 用
jq -r '.packages[] | "\(.name)\t\(.version)\t\(.license // ["unknown"] | join(" | "))"' composer.lock提取结构化清单 - 注意:有些包的
license字段在 lock 文件里为空或为 URL(如"https://example.com/LICENSE"),jq会输出unknown,这类必须人工确认 - 该方式不依赖
vendor/,适合 CI 早期卡点;但结果可能与composer show不一致——这是常态,不是 bug,因为两者数据源不同
zicht/composer-license-plugin 是目前覆盖最全的批量方案
当需要递归扫描所有依赖(含 require-dev 和传递依赖)、标准化模糊 license 值、并尝试读取实际 LICENSE 文件时,zicht/composer-license-plugin 是当前最成熟的第三方选择:
- 安装:
composer require --dev zicht/composer-license-plugin - 导出:
composer licenses --format=json > licenses.json,它会递归扫描所有依赖 - 它能把
"The MIT License"归一化为MIT,把"SEE LICENSE IN LICENSE.md"替换为实际匹配到的 SPDX ID(如MIT或GPL-3.0-only) - 注意:插件默认跳过私有 Git 仓库依赖(如
"repositories": [{"type": "vcs", "url": "git@"}]),这类包得手动审计
license 字段只是元数据,不是法律凭证
composer.json 里的 license 字段由作者自由填写,Composer 从不校验真假。看到 "license": "MIT" 不代表合规:
- 这个字段不是法律承诺,不保证与实际 LICENSE 文件内容一致
-
MIT、mit、The MIT License都是无效 SPDX 标识符;合规工具只认MIT - 遇到
"SEE LICENSE IN LICENSE.md",composer show绝不会自动读取该文件——你得手动打开对应包的LICENSE.md核对全文 - 真正落地的合规检查必须分三步走:查声明 → 找文件 → 对原文,最后一步必须人工核验 LICENSE 文件原文与 SPDX 一致性
最容易被忽略的是 fork 后修改过的包——Composer 不检查它是否篡改了原始协议条款。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










