合法License字段必须填写SPDX官方认可的标识符(如"mit"、"apache-2.0"),大小写不敏感但推荐全小写加连字符,不可用自然语言、URL或自定义描述,多许可证用数组表示。

composer.json 里 license 字段填什么才合法
License 字段不是随便写个名字就行,Composer 会校验它是否属于 spdx.org 官方认可的许可证标识符(SPDX ID)。填错会导致 composer validate 报错,或被 Packagist 拒绝收录。
常见错误现象:Invalid license "MIT"(注意大小写)、Invalid license "Apache 2.0"(空格和点号不合法)、Invalid license "https://opensource.org/licenses/MIT"(URL 不是 SPDX ID)。
- 必须用 SPDX 官方缩写,如:
"mit"、"apache-2.0"、"bsd-3-clause"、"gpl-3.0-only" - 大小写不敏感,但推荐全小写 + 连字符风格,和 Packagist 显示一致
- 不能写自然语言(如
"MIT License"),也不能写 URL 或自定义描述 - 多个许可证用数组表示:
["mit", "bsd-3-clause"],表示“二选一”;用AND/OR组合需用 SPDX 表达式(如"(mit OR bsd-3-clause)"),但多数场景用数组更安全
license 配置影响 Packagist 展示和依赖兼容性判断
Packagist 会把 license 字段直接展示在包页面顶部,并用于过滤搜索(比如筛选 “MIT only” 的包)。更重要的是,某些工具(如 composer prohibit 插件、企业合规扫描器)会基于该字段做许可证兼容性检查。
使用场景:团队内部要求禁止引入 GPL 类协议组件,CI 中可配合 composer show --licenses 提取所有依赖的 license 并校验。
-
gpl-2.0和gpl-3.0-only被视为不同协议,不可混用 -
unlicense和mit虽都属宽松协议,但 SPDX 中是两个独立 ID,工具可能分别处理 - 如果填了
"proprietary",Packagist 会隐藏包的源码链接,且部分镜像站拒绝同步
如何验证 license 是否被正确识别
别只靠肉眼核对,Composer 提供了两级验证机制:本地校验 + Packagist 解析结果比对。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
实操建议:
- 运行
composer validate—— 它会检查字段格式和 SPDX 合法性(但不联网) - 提交前用
composer show --no-dev --licenses your/package-name看解析结果是否符合预期 - 发布后访问
https://packagist.org/packages/your/vendor-your-package,确认右上角显示的 license 图标和文字与你填的一致 - 若显示
unknown,大概率是拼写错误,比如写了"MIT"(大写)或"MIT License"
私有包要不要配 license 字段
要,而且建议明确填写。即使不发到 Packagist,私有仓库(如 Satis、Private Packagist)和内部审计工具仍依赖该字段做策略控制。
容易踩的坑:
- 留空或填
null:Composer 允许,但很多扫描工具默认当“无许可证”,可能触发阻断策略 - 填
"proprietary"是最稳妥的选择,语义清晰,且被所有主流工具识别 - 误填
"internal"或"closed":这些不是 SPDX ID,会被当作无效值,等效于未填 - 团队共用私有包时,license 字段是法律意图的书面声明,不能图省事跳过
协议类型不是技术开关,但它是整个依赖链里最早被读取的元数据之一——填错一个字母,就可能让自动化合规流程卡在第一步。

















