国内 Composer 下载慢的根本原因是默认连接 packagist.org 导致 DNS 解析慢、TLS 握手卡、首字节延迟高甚至超时;必须配置正确镜像源,推荐阿里云:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/,且键名、type 值、URL 结尾斜杠三者缺一不可。

国内用 Composer 下载 PHP 包慢,根本原因不是网络差,而是默认连 packagist.org——DNS 解析慢、TLS 握手卡、首字节延迟高,甚至直接超时。换镜像不是“试试看”,而是必须做的第一步,且必须配对、配全、配准。
确认并设置正确的全局镜像源
执行这条命令即可生效(推荐阿里云):
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
注意三个硬性要求缺一不可:
立即学习“PHP免费学习笔记(深入)”;
- 键名必须是 repo.packagist(不是 repos.packagist、mirror 或其他变体)
- 命令中必须带上 composer 这个 type 值
- URL 必须以 / 结尾(https://mirrors.aliyun.com/composer/ ✅,少斜杠会拼接错误导致 404)
设完立刻验证:composer config -g repo.packagist,输出应为完整 URL 或 JSON 对象,空、null 或仍显示 packagist.org 说明没生效。
项目级配置更稳妥,尤其适合团队协作
进入项目根目录,运行(不加 -g):
composer config repo.packagist composer https://mirrors.aliyun.com/composer/
该命令会自动向 composer.json 的 repositories 数组追加 packagist 条目,不覆盖已有私有源。优势明显:
- 配置随代码提交,新人拉完即用,行为一致
- CI/CD 容器里无需额外配置,每次构建都读取最新设置
- 避免全局配置被不同项目或用户覆盖的隐患
若项目已有 "repositories": {},手动编辑易出错,务必用命令追加。
换源后仍卡住?重点排查这几个真实瓶颈
镜像只加速下载,不解决依赖解析阶段(Resolving dependencies)的卡顿。常见原因包括:
-
PHP 内存不足:默认 128M 不够,临时加
COMPOSER_MEMORY_LIMIT=-1再试 -
Xdebug 启用中:会让解析慢 5–10 倍,用
php -d xdebug.mode=off $(which composer) install临时禁用 -
platform 配置与实际 PHP 版本不匹配:比如
"php": "7.4"却在 PHP 8.2 上运行,触发降级查找逻辑 -
composer.lock 残留已下线包:删掉
vendor/和composer.lock,再composer install --no-cache
验证是否真走镜像,别信“命令跑完了”
光看配置输出不够,要亲眼看到请求发到了镜像域名:
- 运行 composer show laravel/framework -vvv 2>&1 | grep "Downloading",确认日志出现
mirrors.aliyun.com - 或新建空目录,执行 composer init -n && composer require monolog/monolog --no-install,观察 downloading 行的域名
- 临时调试可用 --repository-url= 参数,优先级最高,强制走指定地址
镜像同步通常有 5–30 分钟延迟,新发布的包可能尚未同步,可查镜像站页面底部“最后更新时间”。



















