Composer使用之如何查看当前项目所有授权协议(License)
Composer可通过`composershow--licenses`命令查看依赖授权协议(需2.5.0及以上版本);旧版本或需增强可读性时可使用`composer-licenses`插件生成表格或报告。需注意license字段仅为元数据提示,实际法律效力应以vendor下LICENSE文件为准,合规交付应人工核验。
Composer 本身并没有直接给出“一键列出所有依赖许可证”的大按钮,但我们可以通过组合内置命令和第三方工具,把这件事安排得明明白白。最省心的方式是用 composer show --licenses——不过它能不能用,得看你的 Composer 版本。
composer show --licenses 是否可用取决于 Composer 版本
这条命令在 Composer 2.5.0 及以上版本里是原生的,低于这个版本会直接报错 Command "show --licenses" is not defined。怎么知道自己是什么版本?跑一下 composer --version 就行。如果是 2.5+,直接执行 composer show --licenses,输出会按包名分组,展示每个包的 license 字段值(比如 MIT、BSD-3-Clause、proprietary)。这里要留个心眼:它读的是 composer.json 里声明的字段,并不会去解析代码里的 LICENSE 文件,也不会校验字段格式是否规范——比如 Apache-2.0 和 Apache 2.0 会被当作两个不同的字符串。
用 composer-licenses 插件补全旧版本或增强可读性
如果你用的是旧版本 Composer,或者想让输出更友好一点,可以用 thecodingmachine/composer-licenses 这个插件。它不仅能生成表格,还能输出 HTML/CSV 报告,并且尝试标准化 license 名称。安装方式很简单:全局执行 composer global require thecodingmachine/composer-licenses,然后在项目目录里跑 composer licenses 就行。默认输出是表格,加 --format=html 可以生成带 SPDX 链接的报告,审计的时候很管用。注意:它会跳过那些没声明 license 的包(显示 unknown),而且默认不会检查 dev-dependencies,除非你显式加上 --dev 参数。
license 字段值不等于法律效力,需人工核验
Composer 的 license 字段说到底只是元数据提示,别把它当成法律依据。常见的坑不少:比如包作者在 composer.json 里写了 MIT,但实际仓库里的 LICENSE 文件是 GPL-2.0——这时候得听 LICENSE 文件的。再比如 license 值为 proprietary 或 unlicensed,代表不可商用或无授权,绝对不能忽视。还有像 monolog/monolog 这样的包,composer.json 写的是 MIT,但它的 v2.x 分支可能包含 LGPL 组件,得具体看某个 tag 的 LICENSE 文件。子依赖(transitive dependency)的 license 不会自动继承显示,composer show --tree 能帮你定位依赖树,但每个子包的 license 还得逐个去查。
说白了,如果是为了合规交付,不能只信 composer show --licenses 的输出。尤其是项目涉及金融、医疗这类强监管场景,最稳妥的做法是把 vendor/ 下每个包的 LICENSE 文件手动抽检一遍。工具能省力,但不能代替人眼。


































