Composer仅识别项目根目录的LICENSE或LICENSE.md文件,其内容决定法律效力;composer.json中license字段仅为元信息,不具法律效力,且必须与LICENSE文件内容一致。
项目根目录放一个叫(无后缀)或的纯文本文件,就是 Composer 识别的授权协议 —— 它不读里的字段,也不跑命令生成,只认这个文件存在且内容合规。
为什么
里写
不等于有 LICENSE 文件
那个
字段只是元信息,用于 Packagist 页面展示、被其他包依赖时做兼容性提示,对项目自身法律效力为零。真正起作用的是你手动提供的协议正文 —— GitHub、GitLab、CI/CD 工具、FOSS 合规扫描器(比如 FOSSA、Snyk)全靠读这个文件判断授权状态。
中的
值必须和
文件实际内容一致,否则会误导协作者或审计工具
选协议别只看名字:MIT 和 MIT-0 语义不同;Apache-2.0 要求保留 NOTICE;GPL 类协议可能影响你分发方式
如果项目是私有库或内部工具,也建议放一个
,哪怕内容是
+
快速生成标准 LICENSE 文件的三种靠谱方式
别手敲,容易漏年份、错格式、少空行 —— 大部分开源协议对换行和空格敏感(比如 MIT 第一行必须是完整标题)。
Composer 2.9.6
Composer 2.9.6 是 PHP 生态中高效、稳定的依赖管理工具。此版本在性能与兼容性上进一步优化,改进了依赖解析算法,提升大型项目中的安装与更新速度。它支持并行下载任务,显著减少等待时间,并增强了与私有仓库及镜像源的交互稳定性。同时修复了多项命令行交互与内存使用相关的缺陷,确保在复杂依赖关系下依然可靠运行。无论是新项目初始化还是现有系统维护,Composer 2.9.6 都能为开发者提供流畅、精准的依赖管理体验。
下载
用
直接下载官方原文(推荐):
用
生成(需 Node.js):
从
choosealicense.com
复制对应协议正文,粘贴到新文件,保存为
(注意:不是
,也不是
,大小写和后缀都得对)
常见错误现象和排查点
你以为放了就完事?这几个地方最容易出问题:
文件名写成
或
→ GitHub 不识别,
不报错但生态工具集体失明
用了中文引号、全角空格、Word 自动换行 → 协议文本失效,FOSS 扫描器直接标为 “Unknown license”
年份写成
但没更新到当前年 → 虽不违法,但会被认为维护消极,部分企业采购流程卡在这里
私有项目用了 GPL 协议却没同步代码 → 法律上矛盾,一旦泄露可能触发强制开源义务
最常被忽略的是:LICENSE 文件必须在
里,且不能被
拦截 —— 它不是密钥,不是配置,是项目身份的一部分。放错位置、拼错名字、用错协议版本,比
composer
.lock 错位还难被发现。
LICENSELICENSE.mdcomposer.jsoncomposer.json"license": "MIT"licensecomposer.jsonlicenseLICENSELICENSECopyright (c) 2026 Your Name. All rights reserved.Proprietarycurlcurl -sL https://raw.githubusercontent.com/spdx/license-list-data/master/text/MIT.txt > LICENSEnpxnpx license-generator mit --fullname "Your Name" --year "2026" --output LICENSELICENSELICENSE.txtlicense.mdLICENSE.txtlicense.mdcomposer validate2024-2026git commit.gitignore