license字段必须使用SPDX标准化标识符(如"MIT"),禁用大小写错误、多余文字、数组或URL;多协议用"OR"/"AND"连接;私有代码填"proprietary";完整协议文本应置于LICENSE文件。

composer.json 里 license 字段只接受字符串,不是数组,也不支持自由填写;填错会导致 packagist.org 拒绝收录、IDE 无法识别许可证类型、甚至被某些合规扫描工具标为“无协议风险”。
license 字段必须是 SPDX 认可的标准化标识符
Composer 不校验 license 内容是否真实有效,但会严格比对字符串是否在 SPDX License List 中。填 "MIT" 可以,填 "mit"、"The MIT License" 或 ["MIT"] 都无效。
- 常见合法值:
"MIT"、"Apache-2.0"、"GPL-3.0-or-later"、"BSD-3-Clause" - 多协议共存时用
AND/OR连接,如:"MIT OR Apache-2.0"(注意空格和大小写) - 私有/未授权代码请明确写
"proprietary",这是 SPDX 官方认可的保留字,不是占位符
不要在 license 字段里写解释性文字或 URL
字段语义是“声明协议类型”,不是“说明协议内容”。以下写法全部错误:
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
-
"See LICENSE file"—— Composer 不解析文件内容 -
"https://opensource.org/licenses/MIT"—— 协议标识符 ≠ 链接 -
"MIT License"—— 多出的空格和单词破坏 SPDX 匹配
正确做法是保持字段精简,把完整协议文本放在项目根目录的 LICENSE 或 LICENSE.md 文件中。
license 和 composer.lock 里的实际分发行为无关
这个字段不参与依赖安装逻辑,也不会影响 composer install 的执行结果。它只用于元数据展示(如 packagist.org 页面、IDE 提示、合规审计工具提取)。
- 即使填了
"MIT",如果你的包实际包含 GPL 代码,法律上仍以真实代码来源为准 - CI 流程中若需强校验,应配合
spdx-tools或license-checker等外部工具,不能只信composer.json - PHPStan、Psalm 等静态分析器默认忽略该字段,它不影响类型检查或自动加载
最容易被忽略的是:当包被 fork 或重发布时,license 字段不会自动继承或更新——你得手动核对并修正,否则下游用户看到的协议信息可能早已失效。

















