packagist 不托管代码,仅索引公开 github 仓库;需先创建含有效 composer.json 的公开仓库,再用 github 登录 packagist 并配置 api token 和 webhook,确保 name、description、autoload 等字段合规,最后通过 path repository 本地验证。

packagist.org 账号和 GitHub 仓库先得配好
Packagist 不托管代码,只索引公开 Git 仓库(主流是 GitHub)。你得先有 GitHub 账号,并把包代码推到一个公开仓库里——私有仓库不会被 Packagist 抓取。
接着去 packagist.org 注册账号,用 GitHub 登录就行。登录后点右上角头像 → “Profile” → “API Token”,记下那个 token,后面要用。
- GitHub 仓库名建议用
vendor/name格式,比如myname/laravel-helper,和composer.json里的"name"字段严格一致 - 仓库必须含有效的
composer.json,且不能是空仓库(至少有一个 commit) - 如果 GitHub 仓库是组织名(如
acme/thing),composer.json中的"name"也必须写成"acme/thing",大小写、连字符、下划线都得一模一样
composer.json 必须包含哪些字段才能过 Packagist 校验
Packagist 会解析 composer.json 并校验基础字段。缺 "name" 或 "description" 会直接拒绝提交;"type" 虽非强制,但推荐填(如 "library"、"laravel-package"),影响 Packagist 页面分类。
-
"name":格式为"vendor/name",vendor 名必须和你在 Packagist 的用户名或组织名一致(不能是别人已注册的 vendor) -
"description":不能为空字符串,至少写 5 个英文单词(中文描述会被接受,但不推荐) -
"autoload":至少得有"psr-4"或"psr-0",否则包装不上,require后类找不到 -
"license":建议填标准 SPDX ID,如"MIT"或"Apache-2.0";填"proprietary"也能过,但 Packagist 会标黄警告
示例最小可用片段:
{
"name": "myname/json-validator",
"description": "A lightweight JSON schema validator for PHP",
"type": "library",
"license": "MIT",
"autoload": {
"psr-4": { "MyName\JsonValidator\": "src/" }
}
}
提交后没更新?可能是 webhook 没配或 token 权限不对
手动提交一次后,Packagist 就会监听你 GitHub 仓库的 push 事件,自动抓取新 tag。但首次提交失败最常见原因是 webhook 没触发,或 GitHub token 权限不足。
- 在 Packagist 页面点击 “Submit” 后,它会跳转到 GitHub 授权页——务必勾选
public_repo权限(不是repo,后者是私有库权限,没必要还多风险) - 提交成功后,去 GitHub 仓库 Settings → Webhooks,确认有个目标 URL 是
https://packagist.org/api/github的 hook,且最近一次 delivery 状态是200 OK - 如果改了
composer.json但 Packagist 页面没刷新,别急着重提,先去 Packagist 包页点右上角 “Update” 按钮手动触发同步 - 打 tag 前记得
git push --tags,Packagist 只认 annotated tag(git tag -a v1.0.0 -m "release"),lightweight tag 不识别
本地开发时怎么测试包是否真能被 require 进来
别等发完才试,本地就能验证 autoload 和版本约束是否生效。关键是绕过 Packagist,用 Composer 的 path repository 类型直连本地目录。
- 在测试项目根目录的
composer.json里加一段:
"repositories": [
{
"type": "path",
"url": "../myname/json-validator"
}
],
"require": {
"myname/json-validator": "*"
}
- 然后
composer update myname/json-validator,Composer 会软链接本地目录,而不是从 Packagist 下载 - 这样能立刻验证命名空间、文件路径、
autoload配置是否写错——很多“发布成功但 require 报 Class not found”问题,都是本地没测就发上去的 - 注意:这个
path方式仅限开发,上线前要删掉repositories段,否则别人装你的包会失败
真正容易被忽略的是 vendor 名冲突和 PSR-4 命名空间路径拼写——大小写敏感、末尾斜杠有没有、src 目录是否存在,错一个字符就 class not found,而且错误提示里根本不会告诉你哪行 composer.json 写错了。










