能发布到 Packagist 的 Composer 包只需两点:代码仓库公开可访问且 composer.json 合法含必要字段;name 必须为 vendor/package-name 格式,autoload 推荐 PSR-4,type 建议 library,license 不可缺,需打 annotated tag(如 v1.0.0)并推送,最后在 Packagist 提交仓库 HTTPS 地址。

能发布到 Packagist 的 Composer 包,核心就两点:代码仓库可公开访问 + composer.json 文件合法且含必要字段。没别的玄学。

初始化项目并写好 composer.json

在空目录里执行 composer init 交互式生成基础文件,或手动创建。关键字段不能少:

  • name 必须是

    vendor/package-name 格式(如 myname/hello-world),且和你 GitHub 用户名/组织名一致
  • autoload 要配好,否则别人 require 后根本加载不到你的类。推荐用 PSR-4:
    {
        "autoload": {
            "psr-4": {
                "MyName\\HelloWorld\\": "src/"
            }
        }
    }
  • type 建议设为 library,Packagist 会据此归类
  • 别漏掉 license(如 "MIT"),否则 Packagist 拒绝收录

推送到 GitHub/GitLab 并打上语义化版本标签

Packagist 不拉 master 分支,它只认 Git tag。所以:

  • git push origin main(或 master)把代码推上去
  • 再打一个符合语义化版本的 tag,比如 v1.0.01.0.0(前面带 v 更稳妥):
    git tag -a v1.0.0 -m "First release"
  • 最后推送 tag:
    git push origin v1.0.0
  • 确保 tag 是 annotated(用 -a 参数),轻量 tag(git tag 1.0.0)Packagist 可能不识别

在 Packagist 上提交包 URL

登录 Packagist(用 GitHub 账号即可),点右上角 “Submit” → 粘贴你的仓库 HTTPS 地址(如 https://github.com/myname/hello-world)→ Submit。

  • 首次提交后,Packagist 会自动抓取最新 tag 并解析 composer.json
  • 如果失败,点进包页面看 “Latest update” 下的错误日志,90% 是 composer.json 字段缺失或格式错误
  • 后续新版本只需推新 tag,Packagist 通常几分钟内自动更新(也可手动点击 “Update”)
  • 别用私有仓库链接——Packagist 无法访问,提交必失败

验证安装是否正常

别信页面显示“success”,本地试一遍最实在:

  • 新建测试项目:
    mkdir test-pkg && cd test-pkg && composer init
  • 引入你的包(注意 vendor/package 名必须完全匹配):
    composer require myname/hello-world:^1.0
  • 写个简单 PHP 脚本调用你的类,确认能 new、能 echo、不报 Class not found
  • 如果 autoload 失败,回头检查 src/ 目录结构和命名空间是否与 composer.json 中的 PSR-4 配置严格一致

最容易卡住的地方不是流程,而是 name 字段拼错、tag 没推、或者 autoload 路径对不上——这三处多看一眼 composer.json 和 Git 日志,基本就通了。