卡在Resolving dependencies不是镜像问题,因该阶段不走网络;主因是PHP内存不足、启用xdebug、platform配置错或composer.lock残留已下线包。

composer install 卡在 Resolving dependencies 是镜像没用上?
不是。这个阶段完全不走网络,换镜像源对它零影响。卡在这里的真实原因通常是 PHP 环境或依赖结构问题:
• memory_limit 过低(如 128M),解析复杂依赖树时反复重试 —— 临时加 COMPOSER_MEMORY_LIMIT=-1 测试
• 启用了 xdebug(运行 php -v 可确认),会让依赖图计算慢 5–10 倍 —— 用 php -d xdebug.mode=off $(which composer) install 临时禁用
• platform 配置与实际 PHP 版本不匹配(如 "php": "7.4" 却在 PHP 8.2 上运行),触发大量降级查找逻辑
• composer.lock 里残留已下线包的引用,导致回退搜索失败
镜像源配置三要素必须同时满足
命令 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ 极易“静默失败”,缺一不可:
• 键名必须是 repo.packagist(单数,写成 repos.packagist 就被完全忽略)
• 第二个参数必须是 composer(这是 type 值,不是可选描述,漏掉就 fallback 到官方源)
• URL 必须以 https:// 开头,且末尾带 /(https://mirrors.aliyun.com/composer 会拼出 404)
验证是否真正生效:运行 composer config -g repo.packagist,输出必须是类似 {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"} 的完整 JSON 对象。空、null 或仍是 https://packagist.org 都说明没写进去。
并发下载和缓存必须配全才有效
只配镜像不调并发、不清缓存,等于白配:
• Composer 2.2+ 正确配置并发数:运行 composer config -g http-max-concurrent-downloads 10(别用已弃用的 parallel-downloads)
• 强制走发行包而非源码:运行 composer config -g prefer-dist true
• 执行完必须立刻 composer clear-cache —— 否则旧的 packages.json 和元数据还在缓存里,Composer 仍会尝试从旧地址拉取
验证:分别运行 composer config -g repo.packagist、composer config -g http-max-concurrent-downloads、composer config -g prefer-dist,三个都应输出对应值。
项目级 repositories 会直接覆盖全局镜像
换源后还是慢,大概率是项目自己“不听话”:
• 检查项目根目录 composer.json 是否有 repositories 字段 —— 它会直接屏蔽全局 repo.packagist 配置
• 运行 composer config --list 和 composer config --list --global 对比,确认实际生效的是哪个配置
• 临时绕过所有自定义源测试:运行 composer install --no-plugins --repository=https://packagist.org,如果变快,说明本地 repositories 配置有问题
• 若需保留项目级私有源,建议用 packagist.org 作为 fallback,而不是完全替换,避免意外断连
最常被忽略的一点:镜像配置生效后,第一次 composer install 仍可能慢 —— 因为要首次下载并解析整个包索引(packages.json)。这个过程无法跳过,但后续安装会快得多。别在第一次就怀疑配置失败。


















