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”。