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