发布于2026-07-04 阅读(0)
扫一扫,手机访问
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,或者想让输出更友好一点,可以用 thecodingmachine/composer-licenses 这个插件。它不仅能生成表格,还能输出 HTML/CSV 报告,并且尝试标准化 license 名称。安装方式很简单:全局执行 composer global require thecodingmachine/composer-licenses,然后在项目目录里跑 composer licenses 就行。默认输出是表格,加 --format=html 可以生成带 SPDX 链接的报告,审计的时候很管用。注意:它会跳过那些没声明 license 的包(显示 unknown),而且默认不会检查 dev-dependencies,除非你显式加上 --dev 参数。
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 文件手动抽检一遍。工具能省力,但不能代替人眼。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8