“Your requirements could not be resolved”是依赖冲突,非网络问题;本质是Composer本地求解失败——已获取全部元数据但无版本组合满足所有约束,常见于php版本/扩展不匹配、死版本号冲突或minimum-stability配置不当。

Composer 报错不是随机故障,关键要从错误关键词反推真实原因——90% 的问题根本不用重装或换网络,只看准三类线索就能快速定位。
“Your requirements could not be resolved” 是依赖冲突,不是网络问题
这个错误说明 Composer 已完整下载所有包元数据,但在本地求解时找不到满足全部约束的版本组合。它不怪镜像、不怪缓存,是 composer.json 里写的约束之间真打架了。
- 运行
composer why-not php:8.3(把8.3换成你目标 PHP 版本),直接看到哪个包锁死了低版本 - 运行
composer prohibits vendor/package:version查谁在硬拦你装某个包(比如spatie/laravel-backup的conflict字段) - 加
--dry-run -v执行composer require,错误行里带cannot be installed because的那条就是第一个断点 - 检查
composer.json里的conflict字段——它是硬性排斥,解析器遇到就放弃,不会尝试降级
“Class not found” 先确认 autoloader 是否真正生效
90% 的 Class not found 错误和包没装上无关,而是自动加载机制没“看见”你的类。不要改代码,先让 Composer 自己说话。
- 运行
composer dump-autoload -v,看输出里是否出现你的命名空间(如App\);如果完全没出现,说明autoload配置语法错误或路径写错(比如"App": "app/"缺末尾反斜杠) - 打开
vendor/composer/autoload_psr4.php,搜索你的命名空间前缀,确认映射路径是否是你预期的绝对路径 - 检查入口脚本是否写了
require __DIR__ . '/vendor/autoload.php';—— 用__DIR__,别用./或../,否则子目录下就失效 - 如果
dump-autoload -v卡在某个文件报Parse error,说明该文件含 BOM、短标签未启用或语法错误,用find src -name "*.php" -exec php -l {} \;快速扫描
“file could not be downloaded” 别急着换源,先查 TLS 和时间
国内用户看到这个错,第一反应不该是“网络不好”,而是 CA 证书、系统时间和 HTTPS 握手三件事。直连失败 95% 不是墙的问题,是握手卡在本地。
- 运行
php -r "print_r(openssl_get_cert_locations());",确认default_cert_file路径存在且可读;若为空,在php.ini补openssl.cafile=/etc/ssl/certs/ca-certificates.crt - 执行
date检查系统时间,误差超 5 分钟会导致 TLS 握手失败(尤其 Docker 容器休眠后) - 运行
curl -I https://repo.packagist.org/packages.json,如果返回curl: (35) SSL connect error,基本锁定 OpenSSL 或时间问题 - 临时验证是否镜像问题:加
-vvv跑composer require --no-cache,看日志里最终请求的是哪个 URL
“composer: command not found” 要查 PATH 和安装方式
不是没装,而是 shell 找不到可执行文件。Linux/macOS 和 Windows 的路径逻辑不同,不能一概而论。
- 运行
which composer(Linux/macOS)或where composer(Windows CMD),看是否返回路径;如果空,说明PATH没生效 - 确认安装方式:是
curl -sS https://getcomposer.org/installer | php生成的composer.phar,还是用brew install composer等包管理器装的 - 如果只有
composer.phar,必须手动加到PATH:Linux/macOS 编辑~/.bashrc加export PATH="$HOME/bin:$PATH",再把composer.phar放进~/bin/并改名composer - 改完
PATH后,必须新开终端——source ~/.bashrc不够,子 shell 不继承父 shell 的变更
最常被忽略的点是:很多报错其实发生在 Composer 之外——PHP CLI 和 Web 使用不同 php.ini、扩展没开全、系统时间偏差、甚至 vendor/ 目录归属变成 root。别让“看起来像 Composer 的错”带偏排查方向。


















