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

怎么把本地包推到 Packagist 上
Packagist 不接受直接上传,它只从 Git 仓库自动抓取 —— 你得先有公开的 Git 项目(GitHub/GitLab 等),再让 Packagist 监听那个仓库。不是「发布」,是「注册+同步」。
- 确保
composer.json在项目根目录,且包含合法的name(格式必须是vendor/name,比如myorg/my-package,不能带下划线或大写字母) - Git 仓库必须公开,且至少有一个带 tag 的稳定版本(比如
v1.0.0或1.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-4或classmap,否则用户require后类根本加载不了。例如:{"autoload": {"psr-4": {"MyOrg\MyPackage\": "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,只要仓库公开就等于暴露
composer.json 结构和 Git tag 的要求非常刚性,错一个字段或少一个 tag,整个流程就卡住。最常被忽略的是 webhook 没配,结果每次发版都得人工点更新。










