Composer无自动检测许可证风险的原生命令,唯一可用的composer show仅读取已安装包的composer.json中license字段,不校验真实性、不解析LICENSE文件,合规需插件扫描、CI硬检查与人工核对三结合。

没有“自动检测风险”的原生命令,composer licenses 在大多数项目中根本不存在;唯一稳定可用的是 composer show,但它只读字段、不判风险、不校验真实性——许可证合规必须靠组合动作,不是一条命令能解决的。
运行 composer show 查 license 字段前必须确认 vendor 已就位
这个命令不联网、不查 Packagist、不解析 LICENSE 文件,只读 vendor/ 下已安装包的 composer.json。前提是 vendor/ 目录非空:
- 没执行过
composer install或composer update?composer show monolog/monolog会直接报Package not found - 想查所有顶层依赖?用
composer show --no-dev --format=json,再交给jq处理,别用grep license——数组型 license(如["MIT", "Apache-2.0"])会被切碎漏掉 - 通配符可用但有限:
composer show monolog/*能列 monolog 生态,但symfony/*可能漏掉 polyfill 类子包,因为它们不在composer.json的require里显式声明
看到 "license": "MIT" 就放心?这些情况照样违法
字段值是作者自由填写的字符串,Composer 不校验、不归一、不下载对应 LICENSE 文件。常见误判点:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
"MIT License"或"The MIT License":SPDX 官方不认,composer validate在 v2.5+ 会直接报错,Packagist 显示 ❓ -
"SEE LICENSE IN LICENSE.md":composer show绝不会打开那个文件,你得手动进vendor/monolog/monolog/LICENSE.md确认全文是否标准 MIT 文本 -
["MIT", "GPL-3.0-only"]:没说明是“二选一”还是“同时满足”,法律效力天差地别,必须查原始仓库的 LICENSE 文件和集成方式 -
"proprietary"或空值:不是“默认安全”,而是法律盲区,法务介入前不能上线
真要控风险,得补上三件事:插件扫描 + CI 硬检查 + 人工核对
自动化工具只能筛出明显问题,绕不开人审的关键环节:
- 装插件读真实 LICENSE 文件:
composer require --dev composer/license-checker,再跑vendor/bin/license-checker——它会逐个打开vendor/下每个包的 LICENSE 文件,比对内容是否匹配声明 - CI 中加硬检查:比如只允许白名单协议,其他一律失败:
composer show --no-dev --format=json | jq -r '.packages[] | .license // ["UNLICENSED"] | .[]' | grep -qE '^(MIT|Apache-2.0|BSD-3-Clause)$' || (echo "non-compliant license found"; exit 1) - 人工必须盯住三点:GPL 类传染性条款是否触发(取决于你部署方式是 SaaS 还是分发二进制)、供应商白名单是否覆盖当前版本号、私有包填
"proprietary"是否附带内部法务审批记录
最易被忽略的一点:你改了自己项目的 composer.json 里的 license 字段,只是更新 Packagist 页面上的徽章,既不控制代码权限,也不影响 composer install 行为——它就是个标签,不是开关。

















