description字段必须是字符串且不能为空,因packagist v2强制校验:空字符串、null、数组、对象均被拒收或卡在“processing…”状态;须与name、type同级置于根层级,且需动词开头、含技术锚点、突出约束说明。

description字段为什么必须是字符串且不能为空
Packagist v2 起强制校验 description 字段:空字符串、null、数组、对象,全都不被接受,也不会报错,但包会被拒收或卡在 “Processing…” 状态。你本地 composer validate 通过了,不代表 Packagist 接收成功。
- ✅ 正确写法:
"description": "Generates and validates ULID and UUID v4, zero framework dependencies" - ❌ 错误写法:
"description": ""、"description": null、"description": ["Generates..."]、"extra": {"description": "..."} - ⚠️ 常见卡点:改完后没 push 到 GitHub;push 了但 webhook 失效(检查仓库 Settings → Webhooks);字段写在
extra或autoload下——它必须和name、type并列在根层级
怎么写才算有效——动词开头 + 技术锚点 + 约束说明
用户扫一眼搜索结果,靠的是“做什么”而不是“多厉害”。Packagist 截断显示约前 120 字,IDE 和 composer show 通常只显示前 80 字左右,所以关键信息必须前置。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 以动词开头:
Generates、Validates、Provides、Converts—— 别用 “A”、“An”、“This package” - 带一个真实技术锚点:
PSR-18、Laravel 11、UTF-8、no dependencies,但版本号(如 PHP 8.3+)应移入require,这里优先留协议/标准/生态关键词 - 约束比功能更重要:比如写
zero framework dependencies比lightweight有用;works offline比modern可验证;Unix-style paths only比file path support更防踩坑
keywords填什么才真能被搜到
keywords 不校验格式,但 Packagist 用它加权搜索排序。填错不是没效果,而是主动把自己埋进冷门区。
- 选 3–5 个真实用户会搜的词,优先领域内公认术语:
"psr-7"、"http"、"guzzle"、"async"、"curl" - 不填泛词:
"php"、"library"、"tool"—— 这些词毫无区分度,也不参与排序加权 - 不重复
name或vendor:acme/http-client再填"acme"或"http-client"是冗余 - 含符号的词必须加双引号:
"psr-7"正确,psr-7(无引号)会导致 JSON 解析失败
改完 description 后页面没更新?同步机制不是自动的
修改 composer.json 并 git push,不等于 Packagist 页面立刻刷新。它依赖外部触发,不是监听文件变更。
- 手动更新:登录 Packagist 对应包页,点右上角 Update 按钮
- 自动更新:确认 GitHub/GitLab 仓库已绑定 webhook,且推送的 commit 确实包含
composer.json变更(注意:仅改 README 不触发) - 验证是否生效:
composer show vendor/name(需本地已安装)或直接访问 Packagist 页面看首屏文案 - 容易忽略的细节:
description修改后,keywords和license也建议一并核对——Packagist 同步失败常是多个字段连带问题,不是单点故障










