description 字段应直接写在 composer.json 顶层,与 name、type 等同级,仅支持纯字符串;它被 Packagist 和 composer show 显示,但修改后需重新安装或推送 tag 才生效,且不可在 Packagist 后台编辑。

composer.json 里 description 字段写在哪
直接写在 composer.json 的顶层,和 name、type、autoload 同级,不是嵌套在 extra 或 scripts 里。
它只接受字符串,不支持变量、表达式或换行:
{
"name": "myvendor/my-package",
"description": "A lightweight utility for handling date ranges in Laravel",
"type": "library",
"autoload": { ... }
}
这个字段会被 Packagist 和 Composer 命令行(比如 composer show myvendor/my-package)直接读取显示。
description 不生效的常见原因
改了 description 却没在 composer show 或 Packagist 页面更新?大概率是缓存或发布流程问题:
-
composer show本地显示的是已安装包的元数据,不是当前项目composer.json的内容 —— 修改后需重新composer install或composer update才可能刷新(前提是包是path类型或 dev 版本) - Packagist 上的内容来自你 push 到 GitHub/GitLab 的 tag 或 default branch,不是你本地文件改完就自动同步
- 如果用的是私有仓库(如 Satis、Private Packagist),需确认索引是否已重建
- 字段名拼错成
desc、descripton或放在extra下,Composer 完全忽略
description 和其他字段的关系
它和 keywords、homepage、license 一样,属于 Packagist 展示层字段,不影响安装逻辑或自动加载。
但实际影响不小:
- 在 Packagist 搜索结果里,
description是首屏可见的摘要,比name更决定用户是否点进去 - 某些 IDE(如 PHPStorm)会在
composer require补全时显示该描述 - 如果留空或写成 “My awesome package”,会被 Packagist 标为“信息不完整”,降低搜索权重
- 不要塞关键词堆砌,Packagist 明确建议:用自然语言说明“解决什么问题”,而非“用了哪些技术”
发布后怎么验证 description 生效了
别只信本地 composer.json 文件内容,以 Packagist 页面和命令行为准:
- 访问
https://packagist.org/packages/{vendor}/{package},看页面顶部的灰色摘要栏 - 运行
composer show {vendor}/{package}(确保已安装或可访问远程元数据) - 如果是私有包,用
composer show --all查看所有可用版本的元数据来源 - 注意:刚 push tag 后 Packagist 可能有几分钟延迟,可手动触发 “Update” 按钮(需有维护权限)
真正容易被忽略的是:description 在 Packagist 上不可编辑 —— 它完全由你代码仓库里的 composer.json 决定,删掉字段再发版,Packagist 就显示 “No description provided”。










