发布成功需同时满足:本地composer.json合规(name格式、vendor一致、无version、type为library、autoload正确)、GitHub仓库公开、Git tag规范且已推送;三者缺一不可。

能发布成功,关键不在 Packagist 页面点 “Submit” 那一下,而在于你本地 composer.json 是否合规、GitHub 仓库是否公开、Git tag 是否打对且已推送到远程——三者缺一不可。
composer.json 字段必须合法,否则 Packagist 直接拒收
Packagist 首次抓取时只校验几个硬性字段,错一个就显示 Invalid package information,不给任何提示细节。
-
name必须是小写vendor/package-name格式,比如myname/http-client;MyName/HttpClient、myname_http_client、myname/my client全部被拒 -
vendor部分必须和你在 Packagist 注册的用户名完全一致(不是 GitHub 用户名) - 删掉
version字段——Packagist 完全忽略它,留着反而干扰 tag 同步 -
type显式设为"library",别留空或写project -
autoload至少配psr-4,例如{"psr-4": {"MyName\Http": "src/"}};注意命名空间末尾双反斜杠\和路径末尾斜杠/都不能漏 - 运行
composer validate --strict本地验证,比提交失败再改快得多
Git tag 必须规范且已推送到远程
Packagist 不读 main 或 master 分支,只靠 Git tag 构建版本列表。没 tag,包就等于“不存在”。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- tag 名必须带
v前缀 + 标准语义化格式:v1.0.0、v2.1.3-beta.1✅;1.0.0、V1.0.0、release-v1.0.0❌ - 命令要完整:
git tag -a v1.0.0 -m "First stable release"→git push origin v1.0.0;仅git push或git push --tags容易漏推 - tag 对应的 commit 里,
composer.json必须已提交且通过composer validate - 确认是否真在远程:
git ls-remote --tags origin | grep v1.0.0 - 改旧 tag?别
git push --force—— Packagist 不会自动感知,必须去页面手动点 “Update”
GitHub Webhook 是自动更新的唯一可靠方式
2023 年底起 Packagist 彻底关闭自动发现,没配 Webhook = 每次发版都得手动点 “Update”,极易遗漏。
- 进 GitHub 仓库 →
Settings→Webhooks→Add webhook -
Payload URL填https://packagist.org/api/github(不是带php.cn或username的旧地址) -
Content type选application/json,事件勾选Releases(最稳)或明确勾选Tag push events - 保存后,去 GitHub
Recent Deliveries查状态码,200才算通 - 没配好时,Packagist 页面会显示
This package is not auto-updated,新 tag 推了也看不到
提交到 Packagist 后仍装不上?先查这三处
用户执行 composer require myname/my-package 报 Could not find package,90% 是以下三个地方之一卡住了:
- 没打任何 tag → Packagist 只把它当
dev-main,而composer require默认不拉开发分支 - tag 名不规范(如
1.0.0缺v前缀)→ Packagist 识别为 dev 版本,不会出现在稳定版本列表中 - Webhook 没配通或没触发 → 页面
Last updated时间不变,新 tag 白推 - 临时验证可用:
composer require myname/my-package:dev-main,但仅限调试,别用于生产
最常被忽略的是:Packagist 不验证代码逻辑,也不运行测试;哪怕 src/ 目录为空,只要 composer.json 过了校验,包就能装上——但用户 require 后一调用就 Class not found。

















