最常见的原因是包名拼写错误或大小写不匹配,composer 严格按 Packagist 注册名匹配;其次可能是镜像源未同步、包未上架 Packagist、PHP/Composer 版本不兼容。
packagist.org,粘贴你输入的完整包名搜索,看是否返回结果
composer require laravel/sanctum 不是 sanctum 镜像源没同步或被意外禁用
国内镜像(比如阿里云 https://mirrors.aliyun.com/composer/)若同步滞后,新发布的包或小众包可能查不到;更隐蔽的是,本地配置可能已悄悄关掉官方源。
- 运行
composer config -g repo.packagist.org,如果输出为空或不是{"type": "composer", "url": "https://packagist.org"},说明源被改过 - 临时切回官方源验证:
composer config -g repo.packagist.org.url https://packagist.org - 若确定是镜像问题,可查该镜像首页的「同步时间」,或换腾讯云、华为云等更新更勤的源
包根本不在 Packagist 上
gitHub 上的开源项目≠自动可装。只有作者主动提交或配置了 webhook,Packagist 才会索引。私有库、内部工具、刚建好还没提交的仓库,Composer 默认根本不会去扫。
- 访问
https://packagist.org/packages/vendor/package,404 就是没上架 - 如果是你自己的项目,需去 Packagist 网站登录后手动 Submit,或在 github 仓库设置里启用 Packagist webhook
- 想绕过 Packagist 直接装 Git 仓库?必须在
composer.json的repositories字段显式声明:{"type": "vcs", "url": "https://github.com/username/repo"}
PHP 或 Composer 版本不兼容,导致“假装找不到”
这不是网络错误,而是依赖解析器直接过滤掉了所有可用版本。比如某包要求 php: ^8.1,而你本地是 PHP 7.4,Composer 就会跳过它,最终报“找不到”,哪怕包名完全正确。
- 运行
php -v和composer --version,再打开该包的 Packagist 页面,点开Requires标签页核对约束 - 用
composer show vendor/package查它实际有哪些版本可用(注意dev-main和dev-master已基本废弃) - 临时测试可加
--ignore-platform-reqs,但别留着上线——它掩盖的是真实兼容性风险
真正卡住人的,往往不是“找不到包”,而是你以为它该存在,其实它压根没进 Packagist,或者你的 PHP 版本连看它的资格都没有。