直接生效的命令是composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/,必须严格满足三要素:键名单数repo.packagist、第二参数type值composer、url为https且末尾带/,缺一即静默回退官方源。

直接生效的命令只有一条,但90%的人执行后没用——不是网络慢,是镜像根本没切过去。
composer config -g repo.packagist 命令必须写对三要素
这条命令不是“试试看”,漏掉任意一个就静默失效,composer install照旧卡在 Downloading:
-
-g不能省:缺了就只改当前目录的composer.json,换项目就回退 - 键名必须是
repo.packagist(单数repo,不是repos,也不能写成packagist.org) - URL 必须是 HTTPS + 末尾带斜杠
/,例如https://mirrors.aliyun.com/composer/(少斜杠会拼出/composerpackages.json导致 404)
正确写法:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
验证是否成功:composer config -g repo.packagist,输出应为类似 {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}。如果为空、报错或还是 https://packagist.org,说明没写对。
为什么换了源还是卡在 Resolving dependencies?
镜像只加速下载,不解决依赖解析慢的问题。Resolving dependencies 卡住,基本和网络、镜像无关:
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
-
composer.lock缺失或未提交——Composer 被迫重算整个依赖图 -
"minimum-stability": "dev"开启,触发大量版本试探 - 项目引用了已下线或不可达的私有仓库,Composer 逐个超时重试(每个 30 秒)
- CLI 模式下 PHP 的 OPcache 被禁用,导致 Composer 自身反复编译
快速定位:composer diagnose 查看是否提示 Repo packagist.org is default;再运行 composer config --list --global | grep repositories 确认实际生效的是哪个源。
parallel-downloads=10 是提速刚需,但只对 composer install 有效
Composer 2.2+ 默认并发数是 3,等于没开并行。不调这个值,哪怕镜像再快,下载仍是瓶颈:
- 全局启用:
composer config -g parallel-downloads 10 - CI 脚本中显式带上:
composer install --prefer-dist --no-dev - 别盲目冲到 20:企业网络或低配 CI 容易触发
file_put_contents(): failed to open stream(临时文件竞争),降到 6–8 更稳 - 该参数依赖镜像支持 HTTP/2 多路复用;阿里云、清华、腾讯镜像都支持,但私有源若不支持,设高了也白搭
运行 composer --version 确认是 2.2+;若是 1.x,先 composer self-update。
换源后仍走 packagist.org?清缓存 + 防覆盖才是关键
很多人执行完 composer config -g repo.packagist 就以为搞定了,结果 composer install -vvv 日志里还是出现 https://packagist.org/packages.json:
- 必须执行
composer clear-cache:否则 Composer 会优先读本地缓存的海外索引,根本不发请求 - 项目级
composer.json里的repositories字段会覆盖全局配置;可用composer config --list和composer config --list --global对比确认实际生效的是哪个 - 某些包硬编码 GitHub URL(比如
"dist": {"url": "https://github.com/xxx/yyy/archive/..."}),这类不会走镜像,会撞上 GitHub Rate Limit;报错含GithubRateL
最常被忽略的点:项目 composer.json 里若有 "prefer-source": true,它会覆盖全局 --prefer-dist,必须手动删掉。










