composer如何发布自己的包_composer包开发流程【发布】

2次阅读

需手动提交仓库url至packagist并确保composer.json含合法name、type、autoload字段,打语义化git tag(如v1.0.0),且每次更新后须在packagist后台点击“update”同步。

composer如何发布自己的包_composer包开发流程【发布】

怎么让 Packagist 认出你的包

Packagist 不会自动扫描 github,必须手动触发收录。最直接的方式是登录 Packagist 账号后点击 “Submit”,填入你的仓库 URL(比如 https://github.com/yourname/your-package)。它会立刻抓取 composer.json 并校验基础字段。

常见错误现象:Package not found 或提交后显示 Invalid package information,基本都是因为 composer.json 缺少 nametypeautoload 字段;name 格式不对(如含大写字母、下划线)也会被拒。

实操建议:

  • name 必须是 vendor/package 小写格式,比如 myorg/http-client,不能是 MyOrg/HttpClient
  • type 建议设为 library(除非你做的是插件或应用模板)
  • 确保远程仓库公开可读,私有库不会被 Packagist 抓取
  • 首次提交前,先用 composer validate 本地检查 composer.json

版本打标必须用 Git tag,且格式要对

Packagist 依赖 Git tag 解析版本号,dev-maindev-master 是开发分支别名,不是正式版本;用户 require 时默认拉最新 stable 版,没 tag 就什么也装不到。

常见错误现象:执行 composer require yourname/your-package 报错 Could not find package ...,或者只看到 dev-main 可选,没有 1.0.0 这类版本。

实操建议:

  • 打 tag 必须用语义化版本,如 v1.0.0v2.1.3,前面带 v 是惯例(Packagist 默认识别,不带可能被忽略)
  • tag 要 push 到远程:git tag v1.0.0 && git push origin v1.0.0
  • tag 对应的 commit 必须包含合法的 composer.json(尤其是 version 字段可留空,Packagist 以 tag 名为准)
  • 修改已发布 tag 的内容?别试——Git tag 不可变,删了重打再 push 也不会刷新 Packagist,得去它的后台手动 “Update”

autoload 配置错,用户一 require 就 class not found

Composer 加载类全靠 autoload 段落,这里写错,你的包哪怕成功 install,也根本跑不起来。

常见错误现象:Class 'YourVendorYourClass' not found,但文件明明存在、命名空间也对;或者 composer dump-autoload -o 后仍无效。

实操建议:

  • 优先用 psr-4,路径映射要精确到命名空间根,比如 "MyVendor": "src/" 表示 MyVendorFooBar 对应 src/Foo/Bar.php
  • 别漏掉末尾反斜杠:"MyVendor" 不等于 "MyVendor"(后者在 windows 下可能解析异常)
  • 如果用了 files 类型加载函数文件,确保路径是相对于 composer.json 的,比如 "files": ["src/helpers.php"]
  • 发布前在测试项目里跑一遍:composer require yourname/your-package:dev-main → 再 php -r "new YourVendorSomeClass();"

私有包或预发布版本怎么控制可见性

Packagist 公开索引所有提交的包,没法隐藏。所谓“私有”,只能靠绕过 Packagist:用 repositories 手动声明源,或搭私有 Satis/SatisPress。

常见错误现象:误以为打 dev- 前缀就能限制访问,结果别人 composer require yourname/your-package:dev-feature/x 一样能装;或者把 minimum-stability 设成 dev 导致整个项目依赖混乱。

实操建议:

  • 预发布用 betarc 等 stability flag,比如 "version": "1.0.0-beta1",并在 composer.json 里加 "stability": "beta"
  • 真要私有,就别提交到 Packagist,在用户项目的 composer.json 里加 repositories
    {"type": "vcs", "url": "https://github.com/yourname/private-package"}
  • 避免在 composer.json 中写死 minimum-stability,它会影响整个项目,应由使用者控制

最常被跳过的一步:改完 composer.json 或打完 tag 后,没去 Packagist 页面点 “Update” —— 它不会自动轮询,尤其 tag 更新后必须手动触发同步,否则用户看到的还是旧信息。

text=ZqhQzanResources