composer怎么发布自己的包_composer发布packagist教程

2次阅读

需先将含合法composer.json的公开git仓库(带tag)提交至packagist.org,再配置github webhook实现自动同步;私有包不可用packagist,须自建私有仓库或配置repositories。

composer怎么发布自己的包_composer发布packagist教程

怎么把本地包推到 Packagist 上

Packagist 不接受直接上传,它只从 Git 仓库自动抓取 —— 你得先有公开的 Git 项目(GitHub/gitlab 等),再让 Packagist 监听那个仓库。不是「发布」,是「注册+同步」。

  • 确保 composer.json 在项目根目录,且包含合法的 name(格式必须是 vendor/name,比如 myorg/my-package,不能带下划线或大写字母)
  • Git 仓库必须公开,且至少有一个带 tag 的稳定版本(比如 v1.0.01.0.0),Packagist 默认只索引 tagged commit
  • packagist.org/packages/submit 粘贴你的 Git 仓库 URL,点击 Submit —— 它会立刻尝试 fetch composer.json 并校验

composer.json 必须写对的几个字段

字段错一个,Packagist 就拒绝收录,常见报错是 Invalid package information 或直接不显示包。

  • name:强制小写、中划线分隔,vendor/package-name 格式;vendor 建议用 GitHub 用户名或组织名,否则别人 require 时容易混淆
  • type:如果是可安装的库,填 library;如果是 wordpress 插件,填 wordpress-plugin;类型影响其他工具(如 WPackagist)是否识别
  • autoload:至少配 psr-4classmap,否则用户 require 后类根本加载不了。例如:
    {"autoload": {"psr-4": {"MyOrgMyPackage": "src/"}}
  • 别漏掉 license 字段,哪怕只是 "MIT",空值或非法值(如 "proprietary")会导致审核失败

为什么新 tag 推上去 Packagist 不更新

Packagist 默认不会实时轮询你的仓库,它靠 webhook 触发更新 —— 你得手动在 GitHub 设置里加一个,否则每次都要去 Packagist 后台点「Update」。

  • 进 GitHub 仓库 → Settings → Webhooks → Add webhook
  • Payload URL 填 https://packagist.org/api/github
  • Which Events:选 Just the push event(或者勾上 Releases,如果你用 release 发版)
  • Content type 选 application/json,Secret 留空即可
  • 保存后,下次 git push --tags 就会自动触发 Packagist 抓取新版本

私有包能不能走 Packagist

不能。Packagist 是公共索引,所有包都可被任何人 composer require。私有包得自己搭私有仓库(如 Satis、private Packagist、Toran Proxy),或者用 Composer 的 repositories 配置直连 Git。

  • 如果只是内部团队用,推荐在 composer.json 里加 repositories 指向公司 GitLab 地址,type 设为 vcs
  • 别把私有包的 name 提交到 Packagist,否则别人可能误 require 到空壳或报 404
  • 敏感代码、API 密钥、未脱敏配置——这些绝不能出现在公开仓库里,哪怕你没提交到 Packagist,只要仓库公开就等于暴露

Packagist 的机制其实很轻,但它对 composer.json 结构和 Git tag 的要求非常刚性,错一个字段或少一个 tag,整个流程就卡住。最常被忽略的是 webhook 没配,结果每次发版都得人工点更新。

text=ZqhQzanResources