“线上包不存在”主因是Packagist未索引:仓库未公开、composer.json缺失或name字段不合法(须小写、斜杠分隔、无下划线/大写);新包需打v前缀语义化tag(如v1.0.0)并手动点“Update”触发同步,否则require因minimum-stability="stable"默认跳过dev-main版本。

“线上包不存在”不是网络或镜像问题,而是 Packagist 根本没索引到你的仓库——90% 情况下是仓库未公开、composer.json 缺失或 name 字段不合法。
包提交后显示 “Repository not found” 或卡在 “Pending verification”
Packagist 不会主动扫描 GitHub,它只认你手动提交的 URL,且只接受满足硬条件的仓库:
- 仓库必须设为 Public(私有库无法被访问)
-
composer.json必须在仓库根目录,不能放在src/或子文件夹里 -
name字段必须是小写、斜杠分隔、无下划线/大写字母,例如myorg/http-client✅,MyOrg/HttpClient❌ 或myorg_http_client❌ - 首次提交前,至少要打一个语义化 tag:
git tag -a v1.0.0 -m"First release",再git push origin v1.0.0
改完配置后,别等自动更新——去 Packagist 页面点 “Update” 手动触发重抓。
能搜到包,但 composer require 报 “Could not find package”
这是因为 composer search 只查 Packagist 全局索引,而 require 会严格校验:minimum-stability、源是否启用、版本是否符合 semver、autoload 是否可解析。
- 新包默认只有
dev-main分支,若项目设了"minimum-stability": "stable"(默认值),该包直接被跳过 - 临时验证可用:
composer require vendor/name:dev-main,但生产环境禁止这么用 - 真正能装的版本必须是带
v前缀的语义化 tag:v1.0.0、v0.9.5,写成1.0或release-1不会被识别 - 确认 Packagist 页面上该包的 “Latest stable version” 已显示对应 tag,否则说明同步失败
本地 composer require 成功,但类加载失败(Class not found)
包名和安装没问题,只是 PHP 找不到类文件——根本原因是 autoload 配置未生效或映射错误。
-
psr-4的命名空间末尾必须带反斜杠:"MyPackage\": "src/"✅,"MyPackage"❌ -
src/下目录结构必须与命名空间完全匹配,例如类MyPackageHttpClient必须位于src/Http/Client.php - 运行
composer dump-autoload才能让新配置生效;若已发布,需在使用方项目中也执行该命令 - 别依赖 IDE 自动补全来判断路径——直接
var_dump(class_exists('MyPackageHttpClient'))验证
最常被忽略的一点:Packagist 从不缓存或代理代码,它只做元数据索引。哪怕你把 GitHub 仓库地址复制一百遍,只要 composer.json 缺字段、name 不规范、或没打合法 tag,它就当这个包不存在。











