修改 license 字段仅更新元数据,Packagist 需打新 tag 或手动点击“Update”才同步;下游合规扫描、license 显示等依赖该字段刷新,但法律效力取决于 LICENSE 文件、源码注释及分发行为的一致性。

改 composer.json 的 license 字段本身不会触发任何自动行为,也不会影响已安装的依赖;它只是元数据更新,下游工具是否响应取决于它们是否重新读取该字段。
为什么改了 license 后 Packagist 没变化
Packagist 不监听 composer.json 文件变更,只在以下两种情况下抓取最新内容:
- 你推送了一个新 tag(如
v2.1.0),且该 tag 对应的 commit 中composer.json已含新license值 - 你手动点击 Packagist 页面右上角的 “Update” 按钮强制同步(常用于修复 webhook 失败)
只改 main 分支、不打 tag,Packagist 会继续显示旧值。CI/CD 中若用 composer install 或 update,也完全不感知这个变更——它们只管 composer.lock 和依赖解析。
license 字段变更对下游项目的影响场景
真正受影响的不是安装过程,而是合规扫描和人工判断:
- 企业内部镜像(如 Private Packagist)可能配置了 license 白名单,
"license": "AGPL-3.0-only"变更为"MIT"后,需手动刷新策略缓存才放行 - 运行
composer show --licenses时,下游项目看到的是新值;但若之前已锁死版本(composer.lock中记录旧元数据),本地输出仍可能滞后 - FOSSA 或 Snyk 等工具通常按 tag 快照分析,变更后需触发新扫描任务,否则报告里仍标为旧协议
注意:composer validate 在 PHP 8+ 下会对非法 SPDX 值报错,比如把 "MIT" 改成 "mit"(大小写敏感)或 "MIT License"(非标准字符串)。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
如何安全地完成一次 License 变更
法律效力不在 JSON 里,而在 LICENSE 文件和实际分发行为中。必须同步三处:
- 修改
composer.json中的license字段为合法 SPDX 标识符(如"MIT"、"Apache-2.0") - 替换项目根目录的
LICENSE或LICENSE.md文件,确保内容与新协议完全匹配(年份、版权人、条款无删减) - 检查所有 PHP 文件头部注释(如有)是否更新 SPDX 标识,例如将
// SPDX-License-Identifier: GPL-3.0-only改为// SPDX-License-Identifier: MIT
漏掉任一环都可能导致法律声明冲突:Packagist 显示 MIT,但实际分发包里 LICENSE 文件仍是 GPL 文本,这种不一致会被合规工具直接标为高风险。
私有项目从 "proprietary" 切到开源协议的特殊点
这不是纯技术操作,涉及法律边界切换:
- 别只改
composer.json和 LICENSE 文件——确认代码中无硬编码密钥、内部 API 地址等敏感信息残留 - 如果原项目曾引用 GPL 类依赖,而新协议是 MIT,需核实是否构成“衍生作品”,否则单方面改
license可能违反上游授权 - Packagist 不允许私有包直接切为开源协议并保留同名发布;建议新建 vendor 名(如从
acme/internal-tool改为acme/tool),避免混淆历史版本语义
最常被忽略的是:LICENSE 文件必须出现在 git commit 中,且不能被 .gitignore 过滤——哪怕只改了 composer.json,没提交 LICENSE,整个变更在法律和生态意义上都不成立。

















