Composer 的 authors 字段仅支持扁平数组结构,每个元素为含 name、email、homepage、role 四键的对象,role 仅为展示用自由文本,不参与安装/发布逻辑,Packagist 也不依赖它做权限控制。

Composer 不支持在 authors 字段中配置“多个作者的协作角色”(比如谁是主维护者、谁负责文档),它只接受一个扁平的作者对象数组,每个对象描述一位贡献者,且所有字段均为可选字符串。
composer.json 中 authors 数组的合法结构
该字段必须是 JSON 数组,每个元素是一个对象,仅识别以下四个键:name、email、homepage、role。其他字段会被忽略,也不会报错。
常见错误现象:写成对象而非数组、混用中文逗号、漏掉方括号、把 role 当作必填项导致校验失败。
-
name是唯一推荐必填字段;其他三项完全可省略 - 多个作者之间用英文逗号分隔,整个数组用方括号包裹
-
role值无预定义枚举(如不能写"maintainer"或"contributor"来触发特殊行为)——它只是展示用的自由文本 - 顺序不重要,Composer 不按顺序做任何逻辑处理
{
"authors": [
{
"name": "Zhang San",
"email": "zhang@example.com",
"role": "developer"
},
{
"name": "Li Si",
"homepage": "https://lisi.dev",
"role": "documentation"
}
]
}
为什么 role 字段在实际安装/发布中基本没用
Packagist 和 Composer 安装过程完全不读取、不校验、不传递 role 字段。它只出现在 composer show -d 的输出里,或某些第三方工具(如 PHPDocumentor 插件)可能提取展示。
使用场景有限:仅适合人工查阅包元信息时快速区分职责,不适合做权限控制、自动化分发或 CI 分流依据。
- 运行
composer install时,authors内容不会影响依赖解析或 autoloading - 提交到 Packagist 后,网页上会列出全部作者,但点击邮箱不会自动关联 Git 提交者
- 如果想让某人成为 Packagist 上的“维护者”,需单独在 Packagist 后台添加协作者,和
authors无关
容易踩的坑:邮箱格式、空格与验证失败
虽然 Composer 本身不严格校验邮箱格式,但 Packagist 在同步时会拒绝明显非法的 email 值(如缺少 @、包含中文字符),导致包信息无法更新。
- 避免写
"email": "zhang san@example.com"(含空格)→ 应为"zhangsan@example.com" - 不要用
"email": ""或null—— 会触发 Packagist 解析错误 - 若某作者无邮箱,直接 omit 该字段,不要留空字符串
- JSON 中所有字符串必须用英文双引号,单引号或中文引号会导致
composer validate报错
真正影响协作的是 Git 提交签名和 Packagist 协作者设置,authors 数组只是元数据快照,改了它不会改变谁有推送权限、谁收到 issue 通知。










