Packagist 不托管代码,仅索引公开 Git 仓库;提交前须确保 composer.json 合规(name 小写 vendor/package、无 version 字段、含有效 autoload)、Git tag 符合 SemVer 并已推送、GitHub Webhook 正确配置指向 https://packagist.org/api/github。

Packagist 不托管代码,也不接受上传;你只能提交公开 Git 仓库 URL,它会自动索引——但前提是 composer.json 合规、Git tag 规范、Webhook 配置到位,缺一不可。
提交前必须验证 composer.json 是否通过 Packagist 校验
Packagist 首次抓取时会严格校验 JSON 结构和字段,失败就直接拒收,不给任何调试机会。
-
name必须是小写vendor/package格式,比如myorg/http-client;含大写字母(MyOrg/HttpClient)、下划线(my_org/package)或空格一律报错 -
version字段必须删除或留空——Packagist 完全忽略它,只认 Git tag;写死反而导致后续同步失败 -
autoload至少得有一项,推荐"psr-4": {"MyOrg\Http": "src/"};注意命名空间末尾的双反斜杠\和路径末尾斜杠都不能漏 -
require中若声明"php": "^8.1",必须真实兼容,否则会被标记“不兼容”,用户require时可能因平台限制直接失败
本地验证命令:composer validate --strict。它比 Packagist 的检查更宽松,但能提前暴露语法错误和基础字段缺失。
Git tag 必须是标准语义化版本且已推送到远程
Packagist 只从 Git tag 构建版本列表,main 或 dev-main 分支不会被当作正式版索引。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- tag 名必须符合 SemVer:
v1.0.0、v2.1.3✅;1.0、v1、release-1.0.0❌ - 打完 tag 后必须显式推送:
git tag v1.0.0 && git push origin v1.0.0;仅git push不会带上 tag - 修改已发布 tag?别
git push --force——Packagist 不会自动感知,必须去页面点 “Update” 手动重抓 - 确认 tag 是否真在远程:
git ls-remote --tags origin | grep v1.0.0
GitHub Webhook 是自动更新的唯一可靠方式
2023 年底起 Packagist 彻底关闭自动发现,没配 Webhook 就等于每次发版都要手动点 “Update”,极易遗漏。
- 进 GitHub 仓库 →
Settings → Webhooks → Add webhook -
Payload URL填https://packagist.org/api/github(不是带 username 参数的旧地址) -
Content type选application/json,事件勾选Releases(最稳)或Just the push event(需确保 push 包含 tag) - 提交后测试:
git tag v1.0.1 && git push origin v1.0.1,几秒内 Packagist 包页应刷新新版本
如果页面显示 “This package is not auto-updated”,说明 Webhook 没生效——不是网络问题,就是配置漏了或事件没勾对。
用户 require 成功 ≠ 包能用,Class not found 多半出在 autoload
Packagist 只校验 composer.json 结构,不运行代码、不检查类文件是否存在。哪怕 src/ 目录为空,只要 JSON 合规,包就能装上。
- 确保类文件路径与 PSR-4 映射严格一致:
MyOrgHttpClient→src/Client.php,不是src/Http/Client.php - 本地验证 autoload 是否生效:
composer dump-autoload --no-dev && php -r 'var_dump(class_exists("MyOrg\Http\Client"));' - Windows 下 JSON 里写
"MyOrg\Http\"是安全的;写成"MyOrgHttp"可能被解析为转义错误
最常被忽略的一点:Packagist 页面显示 “Latest version: v1.0.0”,不代表用户 composer require myorg/my-package 就一定能加载类——autoload 错一个字符,Class not found 就立刻报出来,而且毫无提示指向配置文件。

















