Composer 不提供发布功能,发布类库需推送到 Git 仓库并在 Packagist 注册;必须遵循 PSR-4 规范、正确配置 autoload、打符合 SemVer 的 tag、确保 Packagist webhook 活跃且 composer.json 中 name 全局唯一。

Composer 本身不提供“发布”功能,它只是 PHP 的依赖管理工具;真正发布类库靠的是将代码推送到 Git 仓库(如 GitHub),再在 Packagist 上注册包名并同步元数据。搞不清这点,你会卡在“本地能装,别人 composer require 不到”的阶段。
确保类库结构符合 PSR-4 自动加载规范
Composer 加载你的类,完全依赖 autoload 配置和目录结构匹配。不按规范来,Class not found 是必然结果。
- 根目录下必须有
composer.json,其中autoload段明确声明命名空间与路径映射,例如:"autoload": { "psr-4": { "MyVendor\MyPackage\": "src/" } } -
src/目录下必须存在对应命名空间的子目录结构,比如src/Http/Client.php对应类MyVendorMyPackageHttpClient - 运行
composer dump-autoload -o生成优化后的自动加载文件,开发时可省略-o,但 CI/CD 或发布前建议加上
打标签(tag)是 Packagist 识别版本的关键
Packagist 不读 master 或 main 分支,只认 Git tag。没有 tag,别人 composer require myvendor/mypackage 默认拉不到任何稳定版。
- 版本号必须符合 SemVer 格式,如
v1.0.0、v2.3.1,前面加v是惯例(Packagist 支持,也兼容不带v的,但统一用v更稳妥) - 打 tag 前确保
composer.json中的version字段与 tag 一致(非必需,但写上能减少歧义) - 命令示例:
git tag v1.0.0 git push origin v1.0.0
- Packagist 默认每 15 分钟轮询一次更新;也可手动点击 “Update” 触发同步(需已绑定仓库)
在 Packagist 上提交包并保持 webhook 活跃
第一次提交后,Packagist 会监听你仓库的 push 和 tag 事件。但若长时间无活动,webhook 可能被 GitHub/GitLab 自动禁用,导致新 tag 不同步。
- 前往 https://www.php.cn/link/ec811d0d775adc62776ba80fadd4ed19 登录,点击右上角 “Submit” → 粘贴你的 Git 仓库 HTTPS 地址(如
https://github.com/myvendor/mypackage) - 成功后进入包页面,点 “Manage” → “GitHub / GitLab / Bitbucket Integration”,按指引安装 Packagist App 并授权仓库权限
- 检查 GitHub Settings → Webhooks,确认
https://www.php.cn/link/ec811d0d775adc62776ba80fadd4ed19/github-webhook状态为 active,且最近一次 delivery 是 2xx - 如果旧 tag 没同步,可手动点 “Force update”;但新 tag 推送后仍失败,大概率是 webhook 断了
最常被忽略的一点:类库的 composer.json 必须有明确的 name(格式为 vendor/package),且该 name 在 Packagist 上全局唯一——重名会导致提交失败,而错误提示非常模糊,只会说 “package not available”。


















