packagist 不托管代码且不自动扫描 github,包必须满足三个硬条件才能被正常安装:composer.json 在公开仓库根目录、name 字段为小写 vendor/package-name 格式、打了符合语义化规范的 git tag(如 v1.0.0)。

直接说结论:Packagist 不托管代码,也不自动扫描 GitHub,你的包必须满足三个硬条件才能被正常安装——composer.json 在公开仓库根目录、name 字段格式合法、打了符合语义化规范的 Git tag(如 v1.0.0),缺一不可。
GitHub 仓库必须公开且含合法 composer.json
Packagist 只索引公开的 GitHub/GitLab/Bitbucket 仓库,私有库提交后必然报 Repository not found 或 Could not fetch package info。它第一次抓取只读默认分支(main 或 master)根目录下的 composer.json,所以:
-
composer.json必须存在,且至少含name、description、type、autoload四个字段 -
name必须是小写vendor/package-name格式,比如myorg/http-client;MyOrg/HttpClient或myorg_http_client都会被拒 -
type推荐设为library,否则 Packagist 可能跳过索引 - 本地验证用
composer validate,别等提交失败才改
提交到 Packagist 后必须配 GitHub webhook
2023 年底起 Packagist 彻底关闭自动发现,手动 Submit 只触发一次抓取。之后你 git push origin v2.0.0,Packagist 不会自动感知——除非 webhook 已生效。典型现象是页面显示 Last updated: 3 days ago,但新 tag 已推。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 进 GitHub 仓库 →
Settings→Webhooks→Add webhook -
Payload URL填https://packagist.org/api/github(注意不是带 php.cn 的旧地址) - Event 类型选
Just the push event,或明确勾选Tag push events - 保存后,去 GitHub webhook 的
Recent Deliveries查状态码,200才算通 - 没配好时,只能手动点 Packagist 包页右上角
Update补救,但不可持续
版本号必须用 Git tag,不是 composer.json 里的 version
Packagist 完全忽略 composer.json 中的 version 字段,它只靠 Git tag 名解析版本。用户执行 composer require myorg/my-package:^1.0 能成功,前提是:
- tag 名是标准语义化格式:
v1.0.0、v2.1.3-beta.1✅;1.0、release-1.0.0、V1.0.0❌ - 必须
git push origin v1.0.0(不是git push --tags模糊推送,容易漏) - 打 tag 的 commit 里,
composer.json必须已提交且合法,否则 Packagist 抓到的是空或错误配置 - 首次发布后,用户看到的仍是
dev-main,直到你打了第一个稳定 tag,Packagist 才生成1.0.0版本并标记为 stable
autoload 配错会导致 Class not found 即使 require 成功
很多人卡在“装上了却用不了”,根本原因是 autoload 映射路径或命名空间不匹配。Packagist 页面能打开、composer require 不报错,不代表类能自动加载。
- PSR-4 映射末尾必须带反斜杠:
"MyOrg\MyPackage\": "src/",写成"MyOrg\MyPackage"(无反斜杠)在部分系统下失效 -
"src/"目录下必须真实存在对应子目录结构,比如src/Helper.php对应MyOrg\MyPackage\Helper - 本地验证运行
composer dump-autoload --no-dev,再php -r 'var_dump(class_exists("MyOrg\MyPackage\Helper")); - 别把测试依赖(如
phpunit/phpunit)写进require,应放require-dev,否则使用者项目可能因冲突装不上
最容易被忽略的是:tag 推送后,Packagist 不会立刻同步到所有镜像源,国内用户有时要等几分钟或清 Composer 缓存(composer clear-cache)才能 require 到新版本。这不是配置问题,是元数据传播延迟。










