packagist发布成功的关键在于本地composer.json合规、github仓库公开、git tag规范且推送到位;name须为小写短横线格式,vendor须与packagist用户名一致,type须为"library",autoload须正确配置psr-4,version字段不可手动填写。

能发布成功,关键不在 Packagist 页面点“Submit”那一秒,而在于你本地 composer.json 是否合规、GitHub 仓库是否公开、Git tag 是否打对并推上去了——三者缺一不可。
composer.json 哪些字段必须写对,否则 Packagist 直接拒收
Packagist 第一次抓取时只看这几个字段,错一个就显示 Invalid package information:
-
name必须是vendor/package-name格式,全小写、用短横线分隔;myorg/http_client或MyOrg/HttpClient都非法,正确写法是myorg/http-client -
vendor部分必须和你在 Packagist 注册的用户名完全一致(不是 GitHub 用户名) -
type显式写成"library",别留空或写project -
autoload至少配psr-4,例如{"psr-4": {"MyOrg\Http": "src/"}}—— 注意命名空间末尾双反斜杠\和路径末尾斜杠/都不能少 - 别在
composer.json里硬写version字段,它会被忽略;版本由 Git tag 决定
本地验证命令:composer validate,报错就别急着提交。
为什么 composer require myorg/my-package 报 Could not find package
这不是网络问题,也不是 Packagist 没收录,而是它根本没识别出“稳定版本”。常见原因:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 没打任何 Git tag,只有
main分支 → Packagist 只把它当dev-main,用户默认不拉 - tag 名不规范:用
1.0.0、release-v1、v1.0.0-beta都不算 stable;必须是v1.0.0、v2.1.3这种带v前缀的语义化版本 - tag 没推到远程:
git tag v1.0.0后忘了git push origin v1.0.0或git push --tags - Packagist 没配 GitHub webhook,新 tag 推了也无人感知,页面右上角
Last updated时间不会变
临时验证可用:composer require myorg/my-package:dev-main,但仅限调试。
如何让新 tag 自动同步到 Packagist,不用每次手动点 Update
靠 GitHub webhook,不是靠“自动更新”开关。配置不对,等于没配:
- 进 GitHub 仓库 →
Settings→Webhooks→Add webhook -
Payload URL填https://packagist.org/api/github(注意是packagist.org,不是 php.cn 等镜像) - Events 选
Just the push event(推荐),或勾选Releases(如果你用 GitHub Releases) - 保存后,去 Packagist 包页刷新,看到
Last updated时间变化,才算生效 - 如果 webhook 显示
Last delivery: 4xx,大概率是 Packagist 账号邮箱未验证(注册后必须点邮件里的链接)
autoload 配对了,但类还是 Class not found
Composer 加载类只认 autoload 里写的映射,不猜路径也不报错。典型踩坑点:
- 命名空间写成
"MyOrgHttp",但实际文件在src/Http/Client.php,那必须确保Client类声明为namespace MyOrgHttp; - 路径写成
"src"却没加末尾斜杠,JSON 解析可能出错;Windows 下尤其敏感 - 改完
composer.json后,本地测试前必须跑composer dump-autoload,否则缓存还是旧的 - 发布后别人装不上?先确认你
src/目录真被提交到 GitHub 了,别漏掉.gitignore误删
最稳妥的本地验证方式:在空目录建测试项目,用 path 仓库类型直连本地代码,改完立刻生效,不用反复推 tag。










