packagist发布包必须满足四个硬性条件:公开git仓库、合规composer.json(name为小写vendor/package、含psr-4 autoload、type=library)、标准语义化git tag(如v1.0.0)且已推送、配置有效github webhook;缺一不可,否则用户无法正常require安装。

composer.json 必须合规,Git 仓库必须公开,Tag 必须推送到远程——缺一不可。Packagist 不托管代码、不扫描 GitHub、不读 version 字段,只索引你主动提交的公开仓库,并严格按 Git tag 解析版本。
检查 composer.json 是否通过 Packagist 校验
Packagist 首次抓取时会拒绝任何字段不合规的 composer.json,失败不提示细节,只显示 “Invalid package information”。本地提前验证能省掉反复提交的麻烦:
-
name必须是小写vendor/package-name格式(如myorg/http-client),vendor必须和你在 Packagist 注册的用户名完全一致;含大写字母(MyOrg/HttpClient)、下划线(my_org/package)或空格直接被拒 - 删掉
version字段——它被完全忽略,留着反而干扰同步 -
autoload至少配psr-4,例如{"psr-4": {"MyOrg\Http\": "src/"}};注意命名空间末尾双反斜杠\和路径末尾斜杠/都不能漏 -
type显式设为library(非project),否则可能跳过索引 - 运行
composer validate --strict本地过一遍,比提交后等报错快得多
打 Git tag 并确保推送到远程
没 tag 就没有稳定版,dev-main 是开发分支别名,用户 composer require 默认不拉它。Packagist 只从 tag 构建版本列表,main 分支再新也没用:
- tag 名必须是标准语义化格式:
v1.0.0、v2.1.3-beta.1✅;1.0、release-1.0.0、V1.0.0❌ - 命令要完整:
git tag -a v1.0.0 -m "First stable release"→git push origin v1.0.0;仅git push或git push --tags容易漏推或误推 dev tag - tag 对应的 commit 里,
composer.json必须已提交且合法;否则 Packagist 抓到的是空配置或校验失败 - 确认是否真在远程:
git ls-remote --tags origin | grep v1.0.0
在 Packagist 提交 URL 后必须配 GitHub Webhook
2023 年底起 Packagist 彻底关闭自动发现,手动 Submit 只触发一次抓取。之后所有新 tag 都依赖 Webhook 自动触发——没配 = 每次发版都要手动点 “Update”,极易遗漏:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 进 GitHub 仓库 →
Settings→Webhooks→Add webhook - Payload URL 填
https://packagist.org/api/github(不是带?username=的旧地址,也不是镜像站) - Content type 选
application/json - Events 勾选
Just the push event(覆盖 tag 推送)或明确勾选Releases;别选Everything,容易触发失败 - 配好后测试:
git tag v1.0.1 && git push origin v1.0.1,几秒内 Packagist 页面应刷新Last updated时间
为什么别人 composer require 不到你的包?
最常被忽略的其实是「第一次提交后,包页默认只显示 dev-main,直到你打了第一个符合规范的 tag」。用户执行 composer require myorg/my-package 时,默认找 stable 版本,没 tag 就只能看到 dev-main 或直接报 Could not find package。
临时验证可用 composer require myorg/my-package:dev-main,但别在生产环境用;真正可用的标志是 Packagist 包页出现 v1.0.0 并标记为 stable —— 这要求你同时满足:仓库公开、composer.json 合规、tag 已推、Webhook 已通。四个条件环环相扣,漏一个,下游就装不上。










