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 会优先展示带邮箱的作者role 字段(即使写了也不生效)authors 数组,composer validate 不报错,但 Packagist 会显示 “No authors listed”description 字段影响 Packagist 搜索与自动补全这个字符串不只是给人看的注释——它会被 Packagist 索引,也参与 composer search 匹配。长度建议控制在 120 字符内,避免被截断:
composer show 输出和 IDE 插件提示它们不改变安装行为,但决定生态可见性与合规提示:
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”。