换镜像只加速下载,卡在“Resolving dependencies”是本地约束过宽导致求解器指数级爆炸,与网络无关;需收紧PHP及包版本约束、禁用xdebug、清缓存并关闭官方源回退。

快,但只加速下载环节;如果卡在 Resolving dependencies,换镜像完全没用。
为什么换镜像后还是慢?先看卡在哪一步
执行 composer install -vvv 或 composer update -vvv,观察日志里最卡的位置:
- 如果卡在
Downloading、Fetching package、大量GET https://.../dist/xxx.zip请求 —— 镜像能明显提速(从几分钟降到秒级) - 如果卡在
Resolving dependencies超过 10 秒,甚至反复回溯版本树 —— 这和镜像无关,是本地 PHP 版本约束太宽、require-dev包太多、或composer.json里写了模糊版本号(如"monolog/monolog": "*")导致的 - 如果命令根本没发出请求,而是报
Could not open input file: composer或putenv() has been disabled—— 这是环境问题,得先修 PATH 或改php.ini
composer config -g repo.packagist 命令必须写对这三点
90% 的失败不是网络问题,是命令敲错。以下三处任一出错,都不生效,且不报错:
-
repo.packagist不能写成repos.packagist(多一个 s 就彻底失效) - 必须带
composer作为 type 参数,不能省:正确是composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/,错的是composer config -g repo.packagist https://mirrors.aliyun.com/composer/ - URL 必须是 HTTPS 且末尾带斜杠:
https://mirrors.aliyun.com/composer/✅,http://...❌,https://mirrors.aliyun.com/composer(缺斜杠)❌
验证是否生效:运行 composer config -g repo.packagist,输出应为 {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"} 或至少是完整 URL 字符串;空、null、或仍是 https://repo.packagist.org 都说明没写进去。
宝塔面板里换源后仍慢?确认执行用户是谁
宝塔的「PHP 管理器」、「一键部署」、「计划任务」默认以 www 用户身份运行,而 composer config -g 写的是 root 用户的配置(路径为 /root/.composer/config.json),www 用户根本读不到。
- 查实际执行用户:进宝塔终端,运行
whoami;或看计划任务里写的执行用户 - 给
www用户单独配:切到www用户下执行(需有权限):sudo -u www composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 更稳妥的做法是项目级配置:进项目根目录,运行
composer config repo.packagist composer https://mirrors.aliyun.com/composer/(去掉-g),它会写进composer.json,所有用户都走这个源
换源后 composer install 报 hash 不匹配?删锁文件重来
镜像只是缓存,元数据结构一致,但首次用新镜像拉包时,composer.lock 里记录的 dist URL 和 hash 是旧源生成的,新镜像返回的包可能因 CDN 缓存策略略有差异,导致校验失败。
- 直接删掉
vendor/目录和composer.lock文件 - 再运行
composer install,它会重新解析依赖、生成新 lock 文件、从新镜像下载全部包 - 别试图手动改
composer.lock—— 容易破坏完整性,Composer 2.2+ 会拒绝加载损坏的 lock
真正容易被忽略的是:镜像只解决下载瓶颈,不优化依赖解析逻辑;如果你的 composer.json 里写着 "php": "^7.4 || ^8.0 || ^8.1 || ^8.2",Composer 就得穷举所有组合,这种设计问题,换十个镜像也没用。


















