跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

composer如何发布自己的包到Packagist?(从composer.json到上线全流程)

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 . js on 必须包含哪些字段才能过 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 会标黄警告 示例最小可用片段: php版微信js-sdk支付接口类 php版微信js-sdk支付接口类 下载
{ "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
写错了。

相关文章