跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

composer怎么查看包的许可证_composer license查看协议方法

Composer 没有 license 命令,官方从未实现;composer show 需 vendor 存在,composer.lock 更稳定但 license 字段可能为空或不规范;自动化查协议不可信,需人工核验或专业工具辅助。 composer license 命令根本不存在 你敲
composer license
或
composer licenses
,得到的只会是:
Command "license" is not defined.
——这不是你装错了,也不是环境没配好,是 Composer 官方从没实现过这个命令。2025 年底起,连社区文档里误传的
composer show --licenses
也在 Composer 2.5+ 中被彻底移除。所有“一键查协议”的幻想,得先打住。 真正能用的只有
composer show
和
composer.lock
composer show
是唯一原生命令,但它有硬性前提:必须已执行过
composer install
,且包已下载到
vendor/
目录下;否则报
Package not found
。而
composer.lock
不依赖 vendor 存在,更稳定,但字段可能为空或不全。 查单个包(快速验证):
composer show monolog/monolog | grep license
导出全部(含 dev 依赖):
composer show --format=json --dev | jq -r '.[] | "\(.name),\(.version),\(.license // "unknown")"'
跳过 vendor 直读锁文件(CI 友好):
jq -r '.packages[] | "\(.name)\t\(.version)\t\(.license // ["unknown"] | join(" | "))"' composer.lock
注意:
.license
可能是字符串、数组或 null,
//
仅处理 null,对空数组无效,得用
(array)$pkg['license']
在 PHP 脚本里强转 license 字段只是元数据,不是法律保证 你看到
"license": "MIT"
,不代表这个包真能闭源商用——它可能只是作者随手填的,Packagist 上未同步,甚至 LICENSE 文件实际是 GPL-3.0。更麻烦的是,有些包 license 字段写的是
"http://example.com/license"
或
"BSD-like"
,SPDX 不识别,工具直接标为 unknown。 Composer 2.9.6 Composer 2.9.6 是 PHP 生态中高效、稳定的依赖管理工具。此版本在性能与兼容性上进一步优化,改进了依赖解析算法,提升大型项目中的安装与更新速度。它支持并行下载任务,显著减少等待时间,并增强了与私有仓库及镜像源的交互稳定性。同时修复了多项命令行交互与内存使用相关的缺陷,确保在复杂依赖关系下依然可靠运行。无论是新项目初始化还是现有系统维护,Composer 2.9.6 都能为开发者提供流畅、精准的依赖管理体验。 下载 常见坑:
BSD-3-Clause
和
BSD-3-Clause-Clear
法律效力不同,但
composer show
都只显示字符串,不区分 某些私有包或 GitLab 仓库未配置
repositories
,
show
查不到 license,得手动翻源码根目录的
LICENSE
文件 插件如
zicht/composer-license-plugin
能启发式扫描 LICENSE 文件内容,但依然无法替代法务人工核验 合规审计别靠 Composer 自带能力 Composer 不检查许可证兼容性,比如 MIT 包里嵌了 GPL 子依赖,它不会报警;也不校验你是否漏签声明文件。真要上生产或过 ISO 审计,得用专用工具。 轻量级推荐:
composer require --dev terrapiq/composer-license-check
,运行
./vendor/bin/license-check
可设黑名单(如禁用 GPL) 企业级方案:FOSSA、Snyk、WhiteSource,支持递归分析、LICENSE 文件哈希比对、自动生成 SPDX SBOM 最稳妥的脚本方案(无额外依赖):
json_decode(file_get_contents('composer.lock'), true)
后遍历
$lock['packages']
,对
$pkg['license'] ?? ['unknown']
强转数组再展开——PHP 环境里跑得最稳 真正难的从来不是“怎么查”,而是“查出来之后信不信”。license 字段空、错、旧、模糊,太常见了;自动化工具只能帮你收齐线索,没法替你签字担责。

相关文章