发布 composer 包到 packagist 不是上传代码,而是让 packagist 索引已公开的 git 仓库并按 git tag 解析版本;需确保 github 仓库公开、composer.json 合规(name 为小写 vendor/package-name、无 version、type 为 library、psr-4 autoload 正确)、tag 规范(如 v1.0.0),并配置 github webhook(payload url 为 https://packagist.org/api/github),5 分钟内即可被 composer require 安装成功。

发布 Composer 包到 Packagist 不是上传代码,而是让 Packagist 索引你已公开的 Git 仓库,并按 Git tag 解析版本。只要 GitHub 仓库公开、composer.json 合规、tag 规范,5 分钟内就能被 composer require 安装成功。
提交前必须验证的 composer.json 关键字段
Packagist 首次抓取时只校验几个字段,错一个就直接报 Invalid package information:
-
name必须为小写vendor/package-name格式(如myorg/http-client),且vendor必须与你在 Packagist 注册的用户名完全一致——不是 GitHub 用户名,除非你已在 Packagist 绑定并同步 - 删掉
version字段:它被忽略,留着反而干扰同步 -
type显式设为"library"(默认值但建议写明) -
autoload至少配psr-4,例如{"psr-4": {"MyOrg\Http\": "src/"}}—— 注意命名空间末尾双反斜杠\和路径末尾斜杠/都不能少 - 本地先跑
composer validate,比提交后等失败快得多
打 Git tag 的正确姿势和常见失效原因
没 tag 就没有稳定版;dev-main 是开发分支别名,用户 require 默认不拉它。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- tag 名必须是带
v前缀的标准语义化版本:v1.0.0、v2.1.3-beta.1✅;1.0.0、V1.0.0、v1.0.0-final❌ - 命令要完整:
git tag -a v1.0.0 -m "First stable release"→git push origin v1.0.0(只git push --tags也行,但容易误推 dev tag) - tag 必须指向含合法
composer.json的 commit,否则 Packagist 抓取时校验失败 - 改旧 tag?别 force-push——Packagist 不会自动刷新,必须手动点包页的
Update
GitHub Webhook 配置失败 = 后续所有新 tag 全靠手动
90% 的“刚 push 了 v2.0.0,但 composer require vendor/pkg:2.0.0 报错”都源于此。
- Payload URL 填
https://packagist.org/api/github(不是镜像站或带?username=的旧地址) - Content type 选
application/json - Events 推荐勾选
Just the push event(覆盖 tag 推送);若用 GitHub Releases,可选Releases;别选Everything,易触发失败 - 配好后测试:
git tag v1.0.1 && git push origin v1.0.1,几秒内 Packagist 页面应更新Last updated时间
预发布版本(alpha/beta/rc)怎么发才被识别
预发布不是加个后缀就行,Packagist 对格式极其敏感。
- 必须以小写
v开头:v1.0.0-alpha✅,1.0.0-alpha或V1.0.0-beta❌ - identifier 仅限
alpha、beta、rc及其数字后缀:v2.0.0-rc.2✅,v1.0.0-dev、v1.0.0-preview❌ - 用户要装需显式指定:
composer require vendor/name:v1.0.0-beta.1;或在项目根composer.json中设"minimum-stability":"beta"+"prefer-stable":true
最容易被忽略的是:Packagist 不运行测试、不检查 src/ 是否为空、也不验证类是否真能加载——它只校验 JSON 结构、tag 存在性、autoload 路径语法。哪怕 src/ 目录下什么都没有,只要 composer.json 过了,包就能 require 成功,但一运行就 Class not found。










