先确认包是否真实存在:访问https://packagist.org/packages/vendor/name验证页面是否404,运行composer search vendor/name查索引,检查大小写与不可见字符;若存在则排查镜像同步延迟、缓存残留或repositories配置错误。

报“Could not find package”先确认包是否真实存在
这不是网络或配置问题,而是 Composer 真的没在当前源里查到那个字符串。别急着换镜像或清缓存。
- 打开
https://packagist.org/packages/vendor/name(把vendor/name换成你实际要装的),看是否返回 404 页面 - 运行
composer search vendor/name,如果完全没结果,说明 Packagist 上压根没收录 - 检查大小写:
monolog/monolog对,Monolog/monolog错;spatie/laravel-backup对,spatie/backup错 - 粘贴包名时小心不可见字符——从网页或聊天记录复制容易带零宽空格,建议手动重打一遍
用了国内镜像却还是 404,可能是同步延迟或源已失效
阿里云、腾讯云等镜像不是实时全量同步,尤其对刚发布的包、dev- 分支、或已被下架的包,极易返回 provider-2025-10.json 404。
- 运行
composer config -g repo.packagist,确认不是https://packagist.phpcomposer.com这类已停用旧地址 - 临时切回官方源验证:
composer config -g repo.packagist composer https://packagist.org - 换源后必须执行
composer clear-cache,否则缓存仍指向旧地址 - 新包刚推到 GitHub ≠ Packagist 能立刻装——得作者主动提交或配好 webhook
私有包或 Git 仓库报 404,repositories 配置漏字段是主因
私有包不会出现在 Packagist,Composer 默认根本不往你公司 GitLab 或本地路径里找。配置错一个字段,它就静默忽略整个 repositories 区块。
-
repositories必须包含完整type和url,例如 GitLab 私库要写成:{"type":"vcs","url":"https://gitlab.example.com/mygroup/mylib.git"} - GitHub 私有仓库需 token 认证:确保
auth.json存在且权限为600,URL 里不能带@username(否则 Composer 会跳过认证) - 分支或 tag 名必须真实存在——
"dev-main"要求远程有main分支,"1.2.3"要求有对应 Git tag,不能是release-1.2.3或v1.2.3-final
为什么 composer search 能搜到,require 却报 not found
composer search 只查 Packagist 全局索引,不校验 PHP 版本、扩展、稳定性或你本地的 repositories 配置;而 composer require 是真安装,会严格按 repositories 顺序 + minimum-stability + 实际元数据匹配。
- 包只有
dev-main版本,但项目设了"minimum-stability": "stable"→ 直接跳过,报 “not found” - 运行
composer config repositories,输出里如果还包含https://repo.packagist.org,说明packagist.org没禁用,私有源再靠前也白搭 -
{"packagist.org": false}必须是repositories数组里的一个独立对象,且放在私有源之后、数组末尾
最常被忽略的是:即使 repositories 配了私有源,只要没显式关闭 packagist.org,Composer 就永远先查官方源兜底——这时你改了十次私有 URL,它根本不会去连。











