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