发布包到 Packagist只需提交公开Git仓库URL,确保composer.json合规(name符合vendor/package、无version、有autoload、声明PHP依赖)、Git有合规语义化Tag(如v1.0.0)并推送至远程。

发布包到 Packagist 不需要手动上传代码或 zip 文件,Packagist 只是索引 GitHub/GitLab/Bitbucket 仓库的元数据;你真正要做的,是确保你的 Git 仓库公开可读、composer.json 合规,并在 Packagist 上「提交仓库 URL」——它会自动抓取、解析并上线。
你的 composer.json 必须通过 Packagist 的基本校验
Packagist 在首次抓取时会严格检查 composer.json 是否满足最低要求,缺一不可:
-
name字段必须存在且符合vendor/package格式(如myorg/my-utils),不能含大写字母或下划线 -
version字段不能出现——它由 Git tag 决定,写死会导致同步失败或版本混乱 -
autoload至少要定义一种方式(如"psr-4": {"MyOrg\": "src/"}),否则包无法被自动加载 - 若用 PHP 原生函数或扩展,需在
require中声明最低版本(如"php": "^8.1"),否则可能被标记为“不兼容”
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 名必须符合 SemVer(如
v1.0.0、1.2.3),v1.0或dev类似命名会被忽略 - Tag 必须推送到远程:
git tag v1.0.0 && git push origin v1.0.0 - 仓库必须是公开的(GitHub/GitLab/Bitbucket 均可),私有仓库无法被 Packagist 抓取
- 如果改了旧 tag 的提交(force-push),Packagist 不会自动更新——需手动在 Packagist 页面点击 “Update”
在 Packagist 上提交仓库后,别等“自动同步”
提交 URL 后,Packagist 通常几秒内完成首次抓取,但常见卡点如下:
- 页面显示 “This package is not auto-updated”,说明 Webhook 没配好——去 GitHub Settings → Webhooks 添加
https://packagist.org/api/github,Content type 选application/json,仅勾选Releases事件 - 如果提交后一直显示 “Package not found”,先用
composer validate本地检查composer.json,再确认 tag 是否真的推上去了(git ls-remote --tags origin) - 首次提交成功后,后续新 tag 会自动上线,但前提是 Webhook 触发成功;没配 Webhook 就只能手动点 “Update”
最常被忽略的是:Packagist 不验证代码逻辑,也不运行测试;它只校验 JSON 结构、tag 存在性与 autoload 可用性。哪怕 src/ 目录为空,只要 composer.json 过了校验,包就能装上——但用户 require 后会立刻报 Class not found。

















