Composer 的 license 字段必须使用 SPDX 标准标识符(如 "MIT"),大小写敏感,不支持自定义文本;填错会导致合规检查误报、CI 告警或企业仓库拒绝同步,且需与实际 LICENSE 文件内容及命名保持一致。

Composer 的 license 字段不是法律文书,只是给包管理器和使用者看的标识符;填错不会导致安装失败,但会影响依赖合规检查、CI 工具告警、甚至被某些企业仓库拒绝同步。
license 字段只接受 SPDX 标识符,不支持自定义文本
Composer 会把 license 值传给依赖分析工具(比如 composer audit、GitHub Dependabot、SonarQube),它们只认 SPDX 官方列表里的标准码。填 "MIT" 可以,填 "MIT License" 或 "See LICENSE file" 就算无效——这些值会被当成专有许可证(proprietary)处理,触发误报。
-
license必须是字符串或字符串数组,例如:"MIT"、["BSD-2-Clause", "GPL-3.0-or-later"] - 大小写敏感:
"mit"不合法,"MIT"才对 - 多许可证用数组,不要用
"MIT / Apache-2.0"这类自由格式 - 闭源项目只能填
"proprietary",别空着或写"closed"等非 SPDX 值
常见许可证对应的标准 SPDX 码
多数人卡在“我用的是 MIT,但为什么扫描还报风险?”——大概率是用了非标准写法,或者混淆了许可证版本。下面几个最常踩坑:
- MIT:必须是
"MIT"(不是"mit"、"The MIT License") - Apache-2.0:必须是
"Apache-2.0"(注意中间是短横,不是下划线或空格) - GPL 系列:带版本号且含
-or-later后缀才表示兼容升级,例如"GPL-3.0-or-later";"GPL-3.0"表示严格锁定 v3 - Unlicense / CC0:填
"Unlicense"或"CC0-1.0",别写"public domain"
license 和 LICENSE 文件不是一回事
license 字段只是声明,不替代实际许可证文件。Composer 不会校验 license 是否与项目根目录下的 LICENSE 文件内容一致。但很多自动化流程(如 PHPStan 扩展、Packagist 元数据抓取)会比对二者,不一致时可能降权或标为“信息不全”。
- 必须存在对应的实际文件:选
"MIT"就得有LICENSE或LICENSE.md,内容是标准 MIT 文本 - 文件名要规范:
LICENSE(无后缀)、LICENSE.md、LICENSE.txt是 Packagist 认可的;license.md(小写)可能被忽略 - 多许可证项目需在文件中明确说明各部分适用条款,仅靠
license数组无法传递这种结构信息
真正麻烦的不是怎么填,而是团队里有人改了 LICENSE 文件却忘了同步 license 字段,或者 PR 模板里没强制校验——这类疏漏在审计时才暴露,但已经合并进主干了。


















