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

2次阅读

composer 没有 license 命令,官方从未实现;composer show 需 vendor 存在,composer.lock 更稳定但 license 字段可能为空或不规范;自动化查协议不可信,需人工核验或专业工具辅助。

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

composer license 命令根本不存在

你敲 composer licensecomposer licenses,得到的只会是:Command "license" is not defined.——这不是你装错了,也不是环境没配好,是 Composer 官方从没实现过这个命令。2025 年底起,连社区文档里误传的 composer show --licenses 也在 Composer 2.5+ 中被彻底移除。所有“一键查协议”的幻想,得先打住。

真正能用的只有 composer showcomposer.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。

  • 常见坑:BSD-3-ClauseBSD-3-Clause-Clear 法律效力不同,但 composer show 都只显示字符串,不区分
  • 某些私有包或 gitlab 仓库未配置 repositoriesshow 查不到 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 字段空、错、旧、模糊,太常见了;自动化工具只能帮你收齐线索,没法替你签字担责。

text=ZqhQzanResources