Composer项目元数据(如authors、description、keywords等)必须定义在composer.json根层级,仅影响Packagist展示、搜索与依赖解析,不参与运行时逻辑;authors须为含name(必填)、email和homepage(可选)的对象数组,description需简洁具体以优化搜索,keywords、type、license等字段决定生态可见性与合规性,且均不嵌套于extra或scripts中。

Composer 项目元数据(如作者、描述、关键词等)不是靠运行时逻辑控制的,而是直接写在 composer.json 根对象层级的字段里——这些字段只影响包注册、Packagist 展示和依赖解析行为,不参与代码执行。
作者信息必须用 authors 数组,不能写成单个对象或字符串
很多人误以为 "author": "John Doe" 能生效,实际上 Composer 完全忽略这种写法,也不会报错。正确格式是固定字段名 authors,值为对象数组,每个对象至少含 name,推荐补全 email 和 homepage:
{
"name": "myvendor/myproject",
"description": "A sample CLI tool",
"authors": [
{
"name": "Jane Smith",
"email": "jane@example.com",
"homepage": "https://janesmith.dev"
},
{
"name": "Alex Lee",
"email": "alex@company.org"
}
]
}
-
name是唯一必填字段;email和homepage可选,但 Packagist 会优先展示带邮箱的作者 - 多个作者按顺序列出,无主次之分;Composer 不解析
role字段(即使写了也不生效) - 如果漏掉
authors数组,composer validate不报错,但 Packagist 会显示 “No authors listed”
description 字段影响 Packagist 搜索与自动补全
这个字符串不只是给人看的注释——它会被 Packagist 索引,也参与 composer search 匹配。长度建议控制在 120 字符内,避免被截断:
- 必须是纯字符串,不能是数组或对象
- 开头不用大写冠词(如 “A”, “An”, “The”),因为 Packagist 搜索默认忽略停用词
- 避免模糊表述如 “A great package”,应写具体用途,例如 “Generates UUID v4 strings without external dependencies”
- 若项目是私有仓库且不上 Packagist,该字段仍用于
composer show输出和 IDE 插件提示
其他元数据字段:keywords、type、license 的实际作用
它们不改变安装行为,但决定生态可见性与合规提示:
-
keywords是字符串数组,用于 Packagist 分类标签,比如["uuid", "random", "security"];拼写错误(如"uuids")会导致搜索失效 -
type默认是library,但设为project或metapackage会影响某些工具链(如composer create-project对project类型有特殊处理) -
license必须是 SPDX 认可的标识符(如"MIT"、"Apache-2.0"),写"see LICENSE file"会导致 Packagist 标为 “Unknown license”,并可能被下游项目拒绝集成
真正容易被忽略的是:所有这些字段都只在 composer.json 的顶层定义才有效;嵌套在 extra 或 scripts 里完全不会被识别。而且一旦发布到 Packagist,修改 description 或 keywords 不会自动刷新已缓存的页面——得触发一次新版本 tag 或手动点击 “Update”。










