0

0

Composer licenses 命令如何查看项目所有依赖的许可证? (合规性检查)

穿越時空

穿越時空

发布时间:2026-01-10 13:15:09

|

678人浏览过

|

来源于php中文网

原创

composer licenses 命令仅显示项目顶层包的 license 字段值,不递归扫描依赖;完整许可证信息需用 composer show --format=json 配合 jq 解析,但 license 字段可能缺失、模糊或不规范,最终应以源码中的 LICENSE 文件为准。

composer licenses 命令如何查看项目所有依赖的许可证? (合规性检查)

composer licenses 命令本身不输出完整许可证列表

直接运行 composer licenses 只会显示顶层包(即你的项目)的 license 字段值,**不是所有依赖的许可证汇总**。它不递归扫描 vendor 目录,也不解析 composer.json 中每个依赖的 license 字段。这是最常被误解的一点——命令名有误导性,实际功能非常有限。

用 composer show --format=json 获取全部依赖许可证

真正能批量提取许可证信息的方式是结合 composer show 的 JSON 输出和轻量解析。它会列出所有已安装依赖及其元数据,其中 license 字段就在每个包对象里:

composer show --format=json | jq -r '.packages[] | select(.license != null) | "\(.name) \(.version) \(.license | join(", "))"'

说明:

  • jq 是必需的命令行 JSON 处理工具macOS/Linux 通常需 brew install jqapt install jq;Windows 可用 jq-win64.exe
  • select(.license != null) 过滤掉没声明 license 的包(避免空值干扰)
  • join(", ") 处理一个包声明多个许可证的情况(如 ["MIT", "Apache-2.0"]
  • 输出形如:monolog/monolog 2.10.0 MITsymfony/console 6.4.0 MIT, Apache-2.0

注意 license 字段可能缺失、模糊或不规范

Composer 不强制要求包作者填写 license,也不校验值是否符合 SPDX 标准。常见问题包括:

Sider
Sider

多功能AI浏览器助手,帮助用户进行聊天、写作、阅读、翻译等

下载
  • "license": "proprietary""license": "unlicensed" —— 无法自动判断合规风险,需人工核查
  • "license": "BSD" —— 没写具体版本(2-clause?3-clause?),SPDX 推荐用 BSD-2-Clause
  • "license": "see LICENSE file" —— 字符串无意义,必须去对应包的 LICENSE 文件看原文
  • 私有包或 fork 包可能完全没填 license 字段,composer show 就不会出现在结果里

自动化合规检查建议用专用工具

靠 shell + jq 做初筛可以,但真要落地合规流程(比如生成报告、拦截高风险许可证、对接 CI),推荐用更健壮的工具:

  • composer-license-checker:专为 PHP 项目设计,支持白名单、黑名单、导出 CSV/HTML 报告
  • FOSSABlack Duck:商业方案,支持跨语言、SBOM 生成、漏洞联动
  • 自建脚本时,别只依赖 license 字段 —— 应同时读取每个包根目录下的 LICENSELICENSE.md COPYING 文件内容做正则匹配(例如识别 “GNU GENERAL PUBLIC LICENSE Version 3”)

许可证字段只是线索,最终以源码附带的许可证文本为准。很多法律团队拒绝接受仅基于 composer.json 的结论。

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2351

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

1532

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

1426

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

951

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

1413

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

1233

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1445

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1304

2023.11.13

c++主流开发框架汇总
c++主流开发框架汇总

本专题整合了c++开发框架推荐,阅读专题下面的文章了解更多详细内容。

25

2026.01.09

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 8.5万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 6.9万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号