homepage 字段必须置于 composer.json 最外层 JSON 对象中,与 name、description 同级;修改后需推送至默认分支或打新 tag 才能触发 Packagist 自动更新。

composer.json 里的 homepage 字段写在哪
它必须放在 composer.json 的最外层 JSON 对象里,和 name、description 同级,不能塞进 require 或 autoload 里。
常见错误是把它当成包元数据的一部分,加到 extra 或 scripts 下——那完全无效,Composer 不认。
- ✅ 正确位置:
"homepage": "https://example.com"直接跟在"description"后面(或任意同级位置) - ❌ 错误位置:
"extra": { "homepage": "..." }—— 这个字段不会出现在 Packagist 页面上 - ⚠️ 注意:值必须是字符串,空字符串或
null会导致 Packagist 显示 “No homepage”
修改后要不要重新提交到 Packagist
要,但不是“重新提交”,而是触发 Packagist 的自动更新。Packagist 只在你 push 新 tag 或默认分支(如 main)有变更时拉取最新 composer.json。
如果你只是改了 homepage 但没发新 tag、也没推到默认分支,Packagist 根本看不到这个改动。
- ✅ 推荐做法:改完
composer.json→git commit -m "set homepage"→git push - ✅ 或者打个新 tag:
git tag v1.2.3 && git push --tags - ❌ 不要手动去 Packagist 网站点“update”,它已不支持手动刷新公开包
homepage 和 repository URL 的区别
homepage 是项目对外的官网或文档页,repository 是代码托管地址(比如 GitHub 仓库 URL),两者语义不同,Packagist 会分别展示。
很多人把 repository 复制给 homepage,结果用户点“Homepage”跳到 GitHub 代码页,体验割裂。
- ✅
repository应该是"https://github.com/user/project" - ✅
homepage更适合填"https://project.dev"或"https://user.github.io/project/" - ⚠️ 如果没有独立站点,宁可留空或指向
repository,也别填错类型——Packagist 会优先显示homepage,且不校验格式
packagist.org 页面不更新?先查这几个地方
改完、push 了、等了十分钟还不生效?别急着重试,先看这些真实卡点:
- ✅ 检查
composer.json是否在默认分支根目录(不是子文件夹里) - ✅ 查 Packagist 包页右上角的 “Last updated” 时间,确认是否已拉取最新 commit
- ✅ 运行
composer validate,如果报错(比如 JSON 语法错、缺少name),Packagist 会跳过整个文件解析 - ⚠️ 特别注意:GitHub/GitLab 的 webhook 若被禁用或失效,Packagist 就收不到推送,得去仓库 Settings → Webhooks 里重装
最常被忽略的是 composer validate 这一步——一个多余的逗号就能让 homepage 彻底消失,而且没有任何提示。










