Composer默认下载慢或失败,是因为国内直连packagist.org受DNS污染、TLS握手超时、网络波动等影响;应使用-r临时指定镜像(如阿里云)或composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/永久切换,并验证输出是否为含HTTPS尾斜杠的正确JSON。

为什么 Composer 默认下载慢甚至失败
国内直连 packagist.org 常因网络波动或 DNS 污染导致超时、Connection refused 或返回空包信息。这不是你本地配置错,而是请求根本没进到上游源——镜像源本质是缓存代理,能绕过跨境链路瓶颈。
临时切换镜像:用 -r 参数指定源
适合单次安装或 CI 环境中避免污染全局配置。执行命令时直接带 -r(即 --repository)参数:
composer create-project laravel/laravel myapp -r https://mirrors.aliyun.com/composer/
注意:-r 后必须跟完整 HTTPS 镜像地址,不能只写域名;该参数仅对当前命令生效,不影响后续操作。
永久切换镜像:改全局 config 或项目 config
推荐优先改全局配置(用户级),避免每个项目重复设置。运行以下任一命令:
- 切阿里云镜像:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 切腾讯云镜像:
composer config -g repo.packagist composer https://mirrors.cloud.tencent.com/composer/ - 恢复官方源:
composer config -g --unset repo.packagist
若只想改当前项目,去掉 -g 参数即可(如 composer config repo.packagist ...),此时配置写入项目根目录下的 composer.json 的 repositories 字段。
验证镜像是否生效 & 常见失效原因
执行 composer config -g repo.packagist 可查看当前全局镜像地址。但真正生效还要看两点:
- Composer 版本 ≥ 2.0 才完全支持
repo.packagist写法;1.x 用户需用composer config -g packagist.org false+ 单独加repositories,否则会 fallback 到官方源 - 某些私有包或
type: package自定义仓库会绕过镜像逻辑,这类依赖仍走原始地址 - 如果用了
composer install --no-plugins,部分镜像插件(如 oldcomposer-asset-plugin)可能干扰,建议不用该 flag
镜像不是万能加速器——它只加速 public 包的元数据和 ZIP 下载,vendor 目录权限、PHP 扩展缺失、composer.lock 锁定版本冲突等问题,换源也解决不了。











