最常见原因是包名输错或大小写不符;Composer严格匹配Packagist注册的完整包名,如monolog/monolog与Monolog/Monolog被视为不同包,后者直接404。

包名输错或大小写不对,是“找不到”最常踩的坑
Composer 不是模糊搜索,它严格比对 Packagist 上注册的完整包名,monolog/monolog 和 Monolog/Monolog 是两个不同包,后者直接 404。很多报错其实根本没连上网络,只是本地拼错了。
- 打开 https://www.php.cn/link/6daab15a4f57549b7f236d7f0cfca3c8,把你要装的包名完整粘进去,看是否返回有效页面
- 检查命令里有没有漏掉 vendor 前缀,比如把
phpunit/phpunit写成phpunit - 别从网页或聊天记录里直接复制包名——里面可能藏了不可见空格或全角字符,建议在纯文本编辑器里重打一遍再粘贴
新包刚发,Packagist 还没索引,不是你网络问题
GitHub 上点下 release 按钮 ≠ Composer 能立刻装到。Packagist 不会自动爬取所有仓库,必须手动提交或配好 webhook 才能进库。你刷新八遍搜索页,它就是不出现,因为压根不在库里。
- 去 packagist.org 右上角点 Submit,填入 GitHub/GitLab 仓库 URL 提交
- 提交后进入该包的 Packagist 页面 → 点 Edit → 开启 Update on Push(即配置 webhook)
- 如果已提交但没生效,点页面上的 Force update 按钮(仅对已关联包可见)
- 确保你的 Git tag 是
v1.0.0或1.0.0,不能是release-1.0、v1.0_final或带空格/下划线
用了国内镜像,但新包或私有分支根本没同步
阿里云、腾讯云等镜像不是实时全量同步,尤其对刚发布的包、dev 分支、或已被下架的包,极易返回 The "https://mirrors.aliyun.com/composer/p/provider-2025-10%24json" file could not be downloaded (HTTP/1.1 404 Not Found)。
- 运行
composer config --list | grep repo.packagist查当前源 - 临时切回官方源验证:
composer config -g repo.packagist composer https://repo.packagist.org - 确认 Laravel China 镜像(
packagist.laravel-china.org)已于 2023 年底停用,还在用必 404 - 换源后务必执行
composer clear-cache,否则旧缓存会继续指向失效地址
私有包、本地开发包没配 repositories,Composer 根本不往那儿找
Composer 默认只查 Packagist,你指了 myorg/my-private-package,但它既没上 Packagist,又没告诉 Composer “去我公司 GitLab 或本地文件夹里翻”,那它当然报“not found”。
- GitHub 公开仓库(未提交 Packagist):在项目
composer.json中加"repositories"段:{"type": "vcs", "url": "https://github.com/myorg/my-private-package"} - 本地调试路径:
{"type": "path", "url": "../my-local-package"} - 装的时候用具体分支或 tag,比如
composer require myorg/my-private-package:dev-main(注意分支名要和 GitHub 默认分支一致) - 别忘了删掉
vendor/和composer.lock,再跑composer install,否则 lock 文件可能锁死一个旧的、无效的 provider 地址










