结论:Composer报“Package not found”主因是包未入Packagist、镜像未同步、项目级repositories覆盖全局配置、元数据缓存未刷新或stability/platform约束过滤,而非网络问题;应优先验证镜像URL、检查项目级配置、手动清理repo缓存并确认版本与PHP兼容性。

直接说结论:不是镜像坏了,而是你正在查的包,压根没进 Packagist,或者镜像还没同步到它,又或者你的本地缓存/配置把它“屏蔽”了。
Composer 报 “Package not found”,90% 的情况和网络、DNS、权限无关,是元数据层面的匹配失败。下面分几个真实高频场景拆解。
curl -I 验证包是否真在镜像里
别猜,直接看镜像有没有这个包的元数据:
- 把
vendor/package替换成你要装的包名,运行:curl -I https://mirrors.aliyun.com/composer/p/vendor/package.json
- 如果返回
HTTP/2 404,说明镜像没同步——等 5–30 分钟再试,或换源(清华、华为镜像同步节奏略有差异) - 如果返回
200但Last-Modified时间比当前晚 1 小时以上,说明镜像滞留旧数据,需清缓存 - 同时打开 https://www.php.cn/link/f69b857233949c6a79158d4bb7ab5061,确认官方源里是否存在;若也 404,那包根本没提交过(比如 Zend Framework 1.x、phpseclib 0.x)
项目级 repositories 字段静默覆盖全局镜像
只要项目根目录 composer.json 里写了 "repositories" 字段,无论内容空不空,Composer 就会忽略 composer config -g repo.packagist 的设置,直接 fallback 到 https://packagist.org 或你写的自定义源。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 检查命令:
composer config repo.packagist(不带-g),输出如果是https://packagist.org,就坐实被项目配置覆盖了 - 临时验证:进项目目录后执行
composer config --unset repositories,再跑composer require vendor/package -vvv,看日志里 URL 是否变成镜像域名 - 长期方案:删掉
composer.json中整个"repositories": []块;或改写为显式启用镜像 + 禁用官方源:{"repositories": [{"type":"composer","url":"https://mirrors.aliyun.com/composer/"}],"packagist.org": false} - 注意:
"packagist": false或"repos.packagist"写法无效,会被 Composer 静默忽略
缓存没清干净,Composer 还在读旧 packages.json
composer clear-cache 不清元数据缓存,它只清 ZIP 包和部分临时文件。真正卡住的是 packages.json 快照——它决定了 Composer 去哪找包、有哪些版本可选。
- 手动删缓存目录(路径因镜像 URL 而异):
rm -rf ~/.composer/cache/repo/https---mirrors.aliyun.com-composer
- Windows 用户对应路径是:
%APPDATA%\Composer\cache\repo\https---mirrors.aliyun.com-composer - 删完后运行
composer require vendor/package --no-install -vvv,观察日志第一行是不是Downloading https://mirrors.aliyun.com/composer/...;如果不是,说明还有别的配置干扰 - 别信
composer diagnose里那句 “Repo packagist.org: OK”——它只检查 PHP 环境,根本不测你配的镜像
包存在但被 stability 或 platform 约束过滤掉了
有时候包真在镜像里,也同步了,缓存也清了,但 composer require 仍报 “not found”。这时候它不是找不到,是“不敢装”。
- 检查
"minimum-stability":如果你设了"stable",而包只有dev-main版本,Composer 就跳过它,不报错也不提示,直接当不存在 - 检查 PHP 版本约束:运行
php -v,再打开该包的 Packagist 页面 → Requires 标签页,核对php和ext-*是否满足 - 检查已有依赖锁死:运行
composer prohibits vendor/package,它会列出哪个已装包拦住了安装(比如illuminate/support 9.52要求 PHP ^8.0,而你用的是 7.4) - 加
-w(--with-dependencies)反而更容易失败——它强制重算整条依赖树,稍有冲突就放弃,建议先不带参数试
最常被忽略的一点:老旧包(没提交过 composer.json 的历史库)、私有包、path 类型本地包,都不走镜像逻辑。它们必须靠 repositories 显式声明,且 type 必须写对(path、vcs、composer),错一个字,Composer 就当没这回事。

















