要将本地php包发布到packagist供他人composer require安装,必须满足三个条件:代码托管于公开git仓库(如github)、composer.json合法且name字段严格匹配packagist账号、tag必须带v前缀(如v1.0.0);packagist仅索引公开仓库元数据,不托管代码,且依赖webhook自动同步新版本。

想把本地写的 PHP 包发到 Packagist 让别人 composer require 安装?核心就三件事:代码得在公开 Git 仓库里、composer.json 必须合法且 name 字段严格匹配你的 Packagist 账号、打 tag 必须带 v 前缀。缺一不可,否则 Packagist 根本不认。
包必须推到公开 GitHub/GitLab 仓库,本地文件夹无效
Packagist 不托管代码,只索引公开仓库的元数据。你本地 vendor/myname/mypackage 再完整也没用。
- 仓库必须设为 Public(私有库 Packagist 抓不到)
-
composer.json必须在仓库根目录,且含必需字段:name(如myname/utils)、description、type(如library)、autoload - 首次推送前,先打一个合法 tag:
git tag -a v1.0.0 -m "First release",再git push origin v1.0.0 - 提交 Packagist 时填的 URL 必须是 HTTPS 克隆地址(如
https://github.com/myname/mypackage),不是git@地址
name 字段被拒的常见原因和修复方式
Packagist 对 name 校验极严,不是格式不对就是账号没对上。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
name必须全小写、仅含字母/数字/短横线/斜杠,且严格为vendor/package-name格式(末尾不能有斜杠,开头不能有空格) -
vendor部分必须与你在 Packagist 注册的用户名完全一致——不是 GitHub 用户名,除非你已绑定并同步 - 改了本地
composer.json的name,但没git add && git commit && git push到远程主分支?Packagist 抓到的还是旧内容 - 用 GitHub 账号登录 Packagist,但注册时填的是邮箱且未绑定 GitHub?vendor 不匹配直接拒
tag 不带 v 前缀,Packagist 就当它不存在
Packagist 只靠 tag 名匹配版本,不读 composer.json 里的 version 字段。
-
git tag 1.0.0→ 完全忽略,composer require myname/utils:1.0.0报Could not find package - 正确命令是:
git tag -a v1.0.0 -m "First stable release",再git push origin v1.0.0 - tag 必须指向含合法
composer.json的 commit,否则即使推送成功,Packagist 抓取时也会校验失败 - 语义化版本必须规范:
v2.1.0、v0.9.5可以,v1.0或dev-main不会触发自动更新
Webhook 没配或失效,新版永远不更新
Packagist 首次抓取只读一次默认分支,后续新 tag 不会自动感知——除非 webhook 正常工作。
- 进 GitHub 仓库
Settings → Webhooks → Add webhook,Payload URL 填https://packagist.org/api/github - Events 选
Just the push event(覆盖 tag 推送)或单独勾选Releases - 没配 webhook 时,每次发新版都得手动进 Packagist 包页点
Update,否则元数据滞留 - 验证是否生效:GitHub Webhook 页面点进对应 hook → 查看
Recent Deliveries,状态码是200才算成功
最常被跳过的其实是 autoload 映射末尾反斜杠和 webhook 状态确认——前者导致 Windows 下类加载失败,后者让所有新 tag 静默失效,查半天才发现根本没触发同步。










