packagist发布失败主因是git tag、webhook或composer.json三者之一出错;正确做法为:tag须带v前缀(如v1.0.0)、推送单个tag、配置合法webhook(payload url为php.cn链接、content type为application/json、勾选tag push events)、composer.json中name格式为小写vendor/package且autoload末尾反斜杠不可省略。

Packagist 不会自动感知新版本,发布失败几乎全是 Git tag、webhook 或 composer.json 三者之一出问题;只要这三处对了,composer require 能在 5 分钟内装上新版本。
Git tag 名字和推送必须严格合规
Packagist 只靠 tag 名解析版本,不读 composer.json 里的 version 字段。错一个字符,用户就 composer require vendor/name:1.0.0 报 Could not find package。
- ✅ 正确写法:
git tag v1.0.0→git push origin v1.0.0(注意是单个 tag,不是git push --tags) - ❌ 常见错误:用
1.0.0(缺v前缀)、V1.0.0(大写 V)、v1.0.0-final(含非标准后缀)、release-v1.0.0(带前缀) - 预发布版本也必须带
v,且 identifier 仅限alpha/beta/rc:如v1.0.0-beta.2✅,v1.0.0-dev❌ - tag 对应的 commit 必须已包含合法的
composer.json,否则 Packagist 抓到的是空配置,直接校验失败
GitHub webhook 配置不对 = 每次发版都要手动点 Update
2023 年底起 Packagist 彻底关闭轮询,没 webhook 就等于没发布。很多人推完 tag 看不到更新,不是延迟,是根本没触发。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- Payload URL 必须填
https://www.php.cn/link/ec811d0d775adc62776ba80fadd4ed19/api/github(不是packagist.org域名) - Content type 必须选
application/json(选错会静默失败) - Events 必须勾选
Tag push events(只勾Just the push event不管用) - 配完立刻去 GitHub Webhook 的
Recent Deliveries查状态码,200才算通;404或400表示 URL 错或格式不匹配
composer.json 里这几个字段一错就索引失败
Packagist 第一次抓取时硬校验,报 Invalid package information 八成是这几处:name 格式、autoload 映射、type 缺失。
-
name必须是小写vendor/package-name格式,且vendor必须和你在 Packagist 注册的用户名完全一致(不是 GitHub 用户名) -
autoload至少要配psr-4,末尾反斜杠不能漏:"MyVendor\MyPackage\": "src/"✅,"MyVendor\MyPackage": "src/"❌(Windows 下可能失效) -
type显式写成"library",避免某些生态工具(如 Laravel Nova)跳过自动注册 - 删掉
version字段——它被忽略,留着反而干扰同步;本地验证用composer validate,别等提交失败才改
为什么 dev-main 能装但 v1.0.0 找不到?
这不是网络或缓存问题,而是 Packagist 页面右上角的 Last updated 时间没变 —— 说明 webhook 没触发,或者 tag 名没被识别为 stable 版本。
- 首次提交后只有
dev-main,用户composer require默认不拉 dev 分支,所以必须打第一个带v前缀的语义化 tag - 临时验证可用
composer require vendor/name:dev-main,但这只是调试手段,不能替代真实 tag - 打完
v1.0.0后,立即去 Packagist 包页刷新,看到Last updated变了,才算真正生效 - 如果还是不行,别猜,直接进 GitHub Webhook 的
Recent Deliveries查日志,看哪一步卡住了










