Composer 的 authors 字段必须是包含至少 name 的对象数组,不可为字符串或单个对象,否则 validate 报错且工具无法识别;官方 schema 不支持 author 单数字段,name 应用真实姓名,email 推荐填写并确保 UTF-8 编码。

Composer 项目中 authors 字段不是“作者”(author)的单值字段,而是必须为数组,每个成员需包含 name 和/或 email,否则 composer validate 会报错或被某些工具忽略。
composer.json 的 authors 字段必须是对象数组
很多人误以为 authors 可以写成字符串或单个对象,但 Composer 官方 schema 要求它是一个 array,且每个元素至少含 name(email 和 homepage 是可选的)。写错会导致:
-
composer validate提示authors[0] does not match the required type - packagist.org 不显示贡献者信息
- IDE 或分析工具(如 PHPStan 插件)无法提取维护者数据
正确写法示例:
{
"name": "myvendor/my-package",
"description": "A sample package",
"authors": [
{
"name": "Alice Johnson",
"email": "alice@example.com",
"homepage": "https://alice.dev"
},
{
"name": "Bob Chen",
"email": "bob@example.org"
}
]
}
为什么不能只用 author(单数字段)?
Composer 的 JSON Schema 中根本没有 author 这个顶层字段——它只认 authors。如果你写了 "author": "Foo":
- Composer 不报错(因允许扩展字段),但完全不解析、不使用该字段
- packagist.org、GitHub Dependabot、PHP CS Fixer 的元数据插件均无视它
- 容易和
vendor/name中的 vendor 名称混淆(例如"author": "symfony"纯属误导)
真正起作用的只有 authors 数组,且必须符合结构约束。
name 和 email 字段的填写注意事项
虽然 email 是可选的,但建议始终提供;name 必须是真实人名或团队标识(非项目名、非昵称)。常见问题包括:
- 用 GitHub 用户名代替真实姓名(如
"name": "octocat")→ 降低可信度,部分企业合规扫描会告警 -
邮箱写成
"noreply@github.com"或空字符串 → 工具可能跳过该条目 - 多个贡献者共用一个 email(如公司统一邮箱)→ 推荐每人独立条目,便于溯源
- 中文名未用 UTF-8 编码保存
composer.json→ 文件保存为 UTF-8 without BOM,否则composer validate可能失败
多人协作时,authors 不是“当前维护者列表”,而是项目历史核心贡献者的合理快照;频繁增删反而影响语义稳定性。留一个准确、可验证的最小集合,比堆砌全部 contributor 更实用。










