跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

composer怎么配置项目License_composer怎么设置开源协议【详解】

license字段必须填SPDX官方标识符如"MIT"或["MIT","GPL-3.0-or-later"],自定义协议只能用"proprietary",填错会导致composer install报错、CI失败及合规工具误判。 composer .json 里 license 字段填什么才合法 license 字段不是随便写个“MIT”或“Apache-2.0”就完事的——Composer 会校验它是否在
spdx/license-list
官方列表中(v2.0+ 强制),填错会导致
composer install
报错或 CI 拒绝通过。 必须用 SPDX License Identifier,比如
"MIT"
、
"Apache-2.0"
、
"GPL-3.0-only"
,不能写
"MIT License"
或
"apache2"
多个协议用数组:
["MIT", "GPL-3.0-or-later"]
,表示“可任选其一”,不是“同时满足” 如果是自定义协议(如公司内部许可),只能填
"proprietary"
,其他字符串(包括
"custom"
)会被 Composer v2+ 拒绝 别把 license 和
type
搞混:
"type": "library"
不影响许可证语义,只用于包分类 为什么 vendor 包的 license 显示不全或报 warning 执行
composer show --licenses
时看到
???
或
UNLICENSED
,通常不是你项目的问题,而是依赖包没规范声明 license —— Composer 只读取其
composer.json
中的
license
字段,不解析 LICENSE 文件内容。 第三方包漏填
license
:常见于老旧包或个人小工具,你无法修复,但可用
composer why-not vendor/package
看是否真有合规风险 包写了
"license": "BSD"` 但没指定版本:SPDX 要求明确写成 "BSD-2-Clause"
或
"BSD-3-Clause"
,否则视为无效 某些包用
"license": "BSD-3-Clause OR MIT"
这种表达式:Composer 不支持逻辑运算符,只会当非法值处理,显示为
???
如何让 composer install 自动拒绝含非合规 license 的包 靠默认行为不行。Composer 不拦截安装,只在
show --licenses
或
audit
(需插件)时提示。真要卡住流程,得加约束。 Composer 2.9.6 Composer 2.9.6 是 PHP 生态中高效、稳定的依赖管理工具。此版本在性能与兼容性上进一步优化,改进了依赖解析算法,提升大型项目中的安装与更新速度。它支持并行下载任务,显著减少等待时间,并增强了与私有仓库及镜像源的交互稳定性。同时修复了多项命令行交互与内存使用相关的缺陷,确保在复杂依赖关系下依然可靠运行。无论是新项目初始化还是现有系统维护,Composer 2.9.6 都能为开发者提供流畅、精准的依赖管理体验。 下载 用
composer config --global allow-plugins false
防止自动加载不安全插件,但这和 license 无关 实际有效方式是配合
composer audit
(Composer 2.5+ 内置):运行
composer audit --no-dev --format=json | jq '.violations[] | select(.severity == "critical")'
检查高危协议(如
"AGPL-3.0-only"
在闭源项目中可能触发法律风险) CI 中建议加一步:
composer show --no-dev --format=json | jq -r '.[].license // ["UNLICENSED"] | .[]' | grep -qE '^(MIT|Apache-2.0|BSD-2-Clause|BSD-3-Clause)$' || (echo "non-compliant license found"; exit 1)
license 字段对 packagist.org 发布和自动分析的影响 Packagist 解析
composer.json
时,只认
license
字段值,且会据此打标签、排序搜索结果。填错不仅影响协作体验,还会导致自动 license 汇总工具(如 FOSSA、Snyk)误判。 填
"license": "MIT"
后,Packagist 页面右上角显示 MIT 图标,API 返回字段
license
值也为
"MIT"
如果填了
"license": ["MIT", "GPL-3.0-or-later"]
,Packagist 只取第一个(
"MIT"
)作主标识,其余丢弃 —— 所以多协议项目务必把最宽松的那个放前面 某些扫描工具依赖 Packagist 元数据而非本地文件,因此即使你项目根目录有完整 LICENSE 文件,只要
composer.json
里写的是
"proprietary"
,工具仍会标记为“无开源协议” license 不是装饰字段,它参与依赖链的合规传递。一个拼写错误,可能让法务团队在审计时多花两小时人工核对。

相关文章