license字段必须为spdx官方标识符(如"mit"),位于composer.json根级,仅接受字符串或字符串数组,填错将导致packagist不识别、ci报unknown、镜像拒绝同步。

license 字段必须填 SPDX 官方标识符(如 "MIT"),不能写自然语言、URL、大小写错误或带空格的变体;它不控制安装行为,但填错会导致 Packagist 不识别、CI 扫描报 unknown、企业镜像拒绝同步。
composer.json 里 license 字段必须写在根级,且值只能是字符串或字符串数组
这个字段不是配置项,也不是插件开关,它就是一个纯元数据声明,只在 composer.json 的顶层出现才有效。
- ✅ 正确位置:
"license": "MIT"或"license": ["MIT", "Apache-2.0"],直接放在{}最外层 - ❌ 错误位置:
"require": { "license": "MIT" }或"autoload": { "license": "MIT" }—— Composer 完全忽略 - ❌ 错误类型:
"license": {"type": "MIT"}(对象)、"license": null、"license": ""(空字符串)都会让composer validate报错或 Packagist 显示 ❓ - ⚠️ 注意:值里不能有尾部空格,
"MIT "和"MIT\n"都会解析失败
SPDX 标识符必须严格匹配官方列表,大小写敏感、连字符不可省略
Composer v2.5+ 强制校验该字段是否属于 spdx.org 官方 License List。填错不是“显示不好看”,而是直接被拒。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- ✅ 合法写法:
"MIT"、"Apache-2.0"、"GPL-3.0-or-later"、"BSD-3-Clause"、"proprietary" - ❌ 常见非法写法:
"mit"(小写在部分版本失败)、"Apache 2.0"(空格)、"GPL-3.0"(缺-or-later或-only后缀)、"BSD"(不明确)、"MIT License"(自然语言)、"https://opensource.org/licenses/MIT"(URL) - ⚠️ 多协议用数组表示“可任选其一”,不是逻辑表达式:
["MIT", "GPL-3.0-or-later"]✅,"MIT OR GPL-3.0-or-later"❌
改了 license 字段,Packagist 还显示 ❓?先本地验证再发布
Packagist 不实时抓取,也不缓存旧值——它只读你最新 tag 对应 commit 里的 composer.json。显示 ❓ 几乎全是字段本身不合法,不是同步延迟。
- ? 第一步本地验证:
composer validate—— 它不联网,但能立刻告诉你 SPDX 是否合法 - ? 第二步检查解析结果:
composer show --no-dev --licenses your/package-name,输出不是???或UNLICENSED才算通过 - ? 第三步发布后确认:https://www.php.cn/link/2171a9b7a83660dc1f75c463d234dc66 右上角图标和文字必须与你填的完全一致
- ⚠️ 隐形坑:
.gitignore误拦了composer.json,或你 push 的是 branch 而非 tag —— Packagist 默认只索引 tagged release
license 字段只是标签,法律效力来自 LICENSE 文件内容
填对 "MIT" 不等于你项目就受 MIT 保护。真正起作用的是项目根目录下那个叫 LICENSE(无后缀)或 LICENSE.md 的文件,且内容必须完整、无删减、年份正确。
- ? 必须存在:
LICENSE或LICENSE.md,不能是LICENSE.txt、license(小写)或License.md(首字母大写) - ⚖️ 内容必须匹配:
"license": "MIT"→LICENSE文件内容必须是完整 MIT 模板(含Copyright (c) [year] [name]) - ? 工具会比对二者:
FOSSA、Snyk、composer audit等一旦发现字段和文件不一致,直接标为“信息冲突” - ⚠️ 最容易被忽略的是:LICENSE 文件必须在 git commit 中,且不能被
.gitignore拦截 —— 它不是密钥,是项目身份的一部分










