composer如何设置自定义包元数据(如description、keywords)?(packagist展示优化)

6次阅读

description 和 keywords 必须位于 composer.json 顶层对象中;description 为≤120字符的字符串,keywords 为小写、无空格、连字符分隔的字符串数组;name 格式为 vendor/name(全小写、单斜杠);packagist 同步依赖 tag、webhook 或手动更新,非实时。

composer如何设置自定义包元数据(如description、keywords)?(packagist展示优化)

composer.json 里 description 和 keywords 写在哪

这两个字段必须直接写在 composer.json 的顶层对象里,不是放在 autoloadrequire 或其他子对象下。Packagist 解析时只认根级字段,嵌套了就完全忽略。

常见错误是误塞进 extrascripts 里,或者加了多余缩进导致 JSON 格式错误——后者会直接让 composer validate 报错:JSON decode Error: Syntax error

  • description 是纯字符串,建议控制在 120 字以内,Packagist 前端只显示前两行
  • keywords 必须是字符串数组,每个词小写、无空格、用连字符分隔(如 "laravel-package"),别写成 "Laravel Package"["laravel", "package"] —— 后者虽合法但搜索权重低
  • 字段名大小写敏感:DescriptionDESCRIPTION 都无效

packagist.org 同步后 description 不更新

Packagist 不实时拉取你仓库的 composer.json,它只在你手动触发同步、或配置了 github/gitlab Webhook 后,从 tag 或默认分支(通常是 main)读取最新内容。改完 composer.json 直接 push 到 main 分支,不打 tag,Packagist 可能几天都不刷新。

  • 最稳的方式:打一个新 tag(如 v1.2.1),然后去 Packagist 页面点 Update
  • 如果用了 Webhook,确认回调地址是 https://packagist.org/api/github(GitHub)或对应 GitLab 地址,且仓库设置里 Webhook 状态为 active
  • 检查 Packagist 项目页右上角的 Last updated 时间,比你 push 时间晚几小时属正常;超过 24 小时没更新,大概率是 Webhook 失败或 JSON 校验不通过

name 字段格式影响 packagist 展示和安装体验

name 不只是标识符,它决定包在 Packagist 上的 URL 路径和用户 composer require 的写法。格式必须是 vendor/name,中间一个斜杠,全部小写,只含字母、数字、连字符和下划线。

  • 错误示例:"my-project"(缺 vendor)、"MyVendor/MyPackage"(含大写)、"vendor/name/subname"(多于一个斜杠)—— 这些都会导致 Packagist 拒绝同步
  • vendor 名应与你的 GitHub 用户名或组织名一致,否则用户 composer require vendor/name 时可能找不到包(Packagist 默认按 vendor 名做命名空间过滤)
  • 如果改过 name,旧包不会自动重定向,已安装的老版本不受影响,但新用户只能搜到新 name

keywords 没出现在搜索结果里

Packagist 的搜索对 keywords 权重不高,真正起作用的是 namedescription 开头部分、以及被多少其他包依赖。单纯砌关键词没用,反而显得 spammy。

  • 选 3–5 个最精准的词,比如写 Laravel 包就用 "laravel""service-provider""configurable",别写 "php""tool" 这种泛词
  • 避免重复:如果 name 已含 laravel-redis-cachekeywords 里再写 "laravel""redis""cache" 就足够,不用补 "laravel-redis"
  • 别指望靠 keywords 排到首页——有 10+ 个活跃 star、被至少 3 个中等体量项目 require,比填满 keywords 更有效

元数据这事,填对位置比填得多重要;同步机制比本地改得勤更重要;名字和描述能不能让人一眼看懂,比关键词数量更影响实际点击率。

text=ZqhQzanResources