Composer 的 license 字段必须使用 SPDX 标识符(如 MIT、Apache-2.0),填错会导致 Packagist 显示异常、GitHub 无协议徽章、合规工具报错、composer show 显示 ??? 及 validate 失败。

Composer 项目里加协议,不是改 composer.json 里一个 license 字段就完事的——它得合法、可读、且被 Packagist 和下游工具识别,否则 CI 报警告、别人 fork 时搞不清版权边界。
license 字段填什么才被 Packagist 接受
Packagist 只认 SPDX 协议标识符(比如 MIT、Apache-2.0、GPL-3.0-only),不接受中文、自定义描述或模糊写法(如 "开源"、"见 LICENSE 文件")。
-
license必须是字符串或字符串数组;单协议直接写"MIT",多协议用数组:["MIT", "GPL-3.0-only"] - 别写
"MIT License"或"The MIT License"——Packagist 会标为 invalid - 如果用非 SPDX 协议(比如公司内部协议),必须留空
license字段,靠LICENSE文件说明,但 Packagist 页面会显示 “No license”
为什么改了 composer.json 后 packagist 没更新
Packagist 不实时拉取你的 composer.json;它只在你 push tag 或手动触发 sync 时抓取最新 release 的根目录文件。改完 composer.json 后:
- 必须打新 tag(如
v1.2.1),不能只改main分支 - 确保 tag 对应的 commit 里
composer.json确实含正确license字段 - 检查 Packagist 项目页右上角的 “Last updated” 时间,点 “Update” 按钮强制同步(有时 webhook 失败)
- 别依赖
composer update——它只影响本地锁文件,不推任何东西到 Packagist
license 写错会导致哪些实际问题
表面只是 Packagist 显示异常,但下游集成时容易出硬伤:
- GitHub 仓库顶部不显示协议徽章(如
MITbadge),降低可信度 - 某些企业合规扫描工具(如
FOSSA、Black Duck)会报unknown license警告,卡住上线流程 - 使用
composer show --licenses查依赖树时,你的包会显示???,破坏整个许可证汇总逻辑 - 如果
license值是无效字符串(如"Proprietary"),composer validate会失败(PHP 8+ 更严格)
协议这事,填对 SPDX 标识符只是第一步;真正麻烦的是协议和实际代码范围是否匹配——比如用了 GPL 依赖却声明 MIT,或者 LICENSE 文件内容和 license 字段冲突,这种没法靠改 JSON 解决。










