Composer 不自动生成 LICENSE 文件,需手动创建并确保与 composer.json 的 license 字段一致;推荐用 npx license-generator 生成或从 choosealicense.com 复制标准文本保存为 LICENSE(无后缀、首字母大写);私有项目也应提供;多许可证须明确 OR/AND 关系;CI/CD 中需校验文件存在及内容匹配 SPDX 规范。

Composer 不会自动生成 LICENSE 文件,也不会读取或校验 composer.json 中的 license 字段来生成它——你必须手动提供一个合规的 LICENSE(无后缀)或 LICENSE.md)文件,否则法律授权不成立,合规工具会报错。
composer.json 的 license 字段只是元数据,不是许可证本身
这个字段只用于 Packagist 展示、依赖筛选和部分扫描工具的初步过滤。它不参与安装、加载或法律效力判定。
-
license必须写在composer.json根级,值为字符串(如"mit")或字符串数组(如["mit", "apache-2.0"]) - 填错格式(比如
"MIT License"、"https://..."或带空格的"mit ")会导致composer validate报错,Packagist 显示unknown - 即使
license填对了,没放真实LICENSE文件 → 法务上等于“未授权”,企业合规流程可能直接拒收
怎么快速生成合规的 LICENSE 文件
别手敲,也别从 Word 或网页直接复制——全角空格、中文引号、自动换行都会让 FOSS 扫描器识别失败。
- 用
curl下载 SPDX 官方原文:curl -sL https://raw.githubusercontent.com/spdx/license-list-data/master/text/MIT.txt > LICENSE - 用
npx自动注入信息(需 Node.js):npx license-generator mit --fullname "Your Name" --year "2026" --output LICENSE - 从 choosealicense.com 复制纯文本,粘贴到新建文件,**保存为
LICENSE(注意:不是LICENSE.txt,也不是license小写)** - 私有项目也建议放一个:
echo -e "Copyright (c) 2026 Your Name.\nAll rights reserved.\n\nProprietary." > LICENSE
多许可证、自定义协议和 CI/CD 容易踩的坑
很多团队在自动化流程里只改了 composer.json,却忘了同步更新 LICENSE 文件,导致扫描工具报“许可证冲突”。
- 多许可证(如
"license": ["mit", "apache-2.0"])必须在LICENSE文件中明确说明是“OR”还是“AND”关系,不能只贴一份 MIT - 填
"proprietary"却放了 MIT 文本 →license-checker、FOSSA、GitHub Dependabot 都会标为冲突 - CI 中建议加检查:
test -f LICENSE && head -n1 LICENSE | grep -q "MIT$"(根据实际协议微调),防止漏提交 - Docker 构建或 GitHub Actions 中,确认工作目录下确实存在
LICENSE—— 某些 .gitignore 模式会误删它
最常被忽略的一点:SPDX 标识符大小写敏感且连字符不可省略,gpl-3.0-only ≠ GPL-3.0,而 LICENSE 文件内容必须与 SPDX 官方文本逐字一致(包括空行和缩进)。工具不会告诉你哪里差了一个空格,只会标“Unknown license”。











