Composer 的 license 字段仅为元信息标签,仅用于 Packagist 展示和工具读取,不控制权限、安装或法律效力;修改它不影响依赖行为,也不代表获得对应授权。

Composer 项目里的 license 字段只是元信息,不参与任何权限控制、安装限制或法律效力,改它不会影响依赖行为,也不代表你获得了某许可证的授权。
composer.json 的 license 字段是干啥的
它只在 Packagist 页面显示、被其他工具(比如 composer show 或合规扫描器)读取,用于人工查阅或自动化归档。不是代码开关,也不是法律文件——改错也不会报错,写成 "license": "MIT" 不等于你项目就自动获得 MIT 授权。
常见错误现象:composer install 失败后怀疑是 license 写错了;或者看到别人项目写了 "proprietary" 就以为能阻止他人使用。
-
license值不校验格式,支持字符串(如"MIT")、数组(如["MIT", "Apache-2.0"])、甚至自定义描述(如"All rights reserved") - Packagist 会识别常见 SPDX 标识符(如
"GPL-3.0-only"),但不强制要求;非标准值也能存,只是不带链接和图标 - 如果你用私有包托管(如 Satis / Private Packagist),
license字段对访问权限零影响——控制权在仓库认证和网络策略上
怎么安全地修改 license 字段
直接编辑 composer.json 里 license 键的值即可,无需运行命令。但要注意语义一致性:
- 别把闭源项目写成
"MIT",除非你真打算按 MIT 条款开源全部代码 - 多许可证项目用数组,例如:
"license": ["BSD-3-Clause", "GPL-2.0-or-later"] - 内部工具/原型项目可写
"proprietary"或"unlicensed",避免误导协作者 - 改完建议同步更新
README.md和项目根目录的LICENSE文件(如果存在),否则容易产生事实冲突
为什么 composer config 不能设全局 license
composer config 管的是本地配置(如 repo 镜像、auth token),不提供设置默认 license 的选项——因为 license 是每个项目的法律声明,不可能也不应该由全局配置决定。
常见错误现象:执行 composer config license MIT 报错 Setting license is not supported,或静默失败。
- Composer 没有
license这个配置项,所有尝试设置它的命令都会被忽略或报错 - 想批量初始化新项目?用
composer init交互流程时会问 license,也可用--license参数跳过提问:composer init --license=MIT - CI/CD 中生成 composer.json?别硬编码 license 到模板,应从环境变量注入,例如:
"license": "${LICENSE:-proprietary}"(需配合 jq 或 sed 处理)
真正要控制授权行为,得靠 LICENSE 文件内容、代码注释、私有仓库权限策略,以及法务审核——composer.json 里的 license 就是个标签,贴歪了没人拦你,但别人信了,锅就得自己背。










