Composer报404主因是源配置错误、缓存锁死失效URL、SSL证书过期或私有仓库未配type;应先查源(composer config -g repo.packagist)、换有效镜像(如阿里云源末尾需斜杠)、清缓存、删vendor与lock后重装,并验证CA证书。

composer 报 404,90% 不是包名写错,而是它根本没在你当前连的源里找到那个包——可能是镜像已下线、私有仓库没配 type、缓存锁死了失效 URL,或证书校验失败后被误判成 404。
怎么看当前用的是哪个 Packagist 源
别猜,直接查配置。运行:composer config -g repo.packagist
如果输出类似 {"url":"https://packagist.phpcomposer.com"},这就是问题根源:这个地址自 2022 年起已返回 404,必须换掉。
注意:composer config --list | grep repo.packagist 能确认是否真写入成功;末尾缺斜杠(如 https://mirrors.aliyun.com/composer ❌)也会导致 404。
换源后为什么还是 404
因为 composer.lock 里存的是原始下载地址(比如 GitHub API 的 URL),不是镜像地址。一旦锁文件里记了一个已失效的 provider 路径,换源也白搭。
必须做三件事:
- 运行 composer clear-cache
- 手动删掉 vendor/ 目录
- 删除 composer.lock
- 再跑 composer install(不是 update)
如果用了自定义 repositories,逐个注释掉再试,确认是不是其中某个 URL 返回 404。
怎么确认是包真不存在,还是源没同步
运行:composer show -p vendor/name(例如 composer show -p monolog/monolog)
如果返回空或 “Package not found”,说明当前源里压根没这个包。
此时打开浏览器访问:https://packagist.org/packages/vendor/name
看网页是否能打开、版本列表是否包含你要的版本(注意大小写)。
如果是私有 Git 包,composer show -p 必定为空——它只查 Packagist 公库,不查你本地 repositories;镜像也不代理私有源,repositories 里的 type: vcs 地址出 404,和镜像无关,得单独排查 Git 服务本身。
SSL 证书过期也会伪装成 404
PHP cURL 握手失败时,composer 常把空响应误报为 404 或 500。
运行:php -r "print_r(openssl_get_cert_locations());"
查看 default_cert_file 路径,检查该 PEM 文件是否存在、最后修改时间是否早于 2023 年。
临时验证:composer config -g secure-http false
再试一次;若成功,说明就是证书问题。
生产环境必须修复:更新 curl.cainfo 和 openssl.cafile 配置项,或把新 PEM 路径写进 php.ini。
最常被忽略的一点:CI 环境(GitHub Actions / GitLab CI)默认不继承本地配置,必须在 workflow 文件里显式执行 composer config -g repo.packagist composer <a href="https://www.php.cn/link/1569ae888190eb8c53b218b0d529e1e9">https://www.php.cn/link/1569ae888190eb8c53b218b0d529e1e9</a>。


















