必须配置repo.packagist而非repositories,因Composer 2.2+硬编码绕过repositories数组直连packagist.org,导致元数据请求仍超时或404;唯一有效全局写法是composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/。

换镜像源不是“可选优化”,是 Composer 在国内能用的前提——不配 repo.packagist,composer install 卡在 Downloading 或反复报 Could not fetch packages.json 就是必然结果。
为什么只改 repositories 不生效?必须设 repo.packagist
Composer 2.2+ 把官方源 packagist.org 当作硬编码权威源,根本不走 repositories 数组。哪怕你手动往 composer.json 里加了阿里云源,元数据(如 provider-laravel~10.0.json)仍会直连海外,导致大量 404 或超时。
-
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/是唯一推荐的全局写法 - 验证是否生效:
composer config -g repo.packagist输出应为 URL 字符串或含该域名的 JSON 对象 - 若项目已有
repositories字段,别手写覆盖——用命令追加,否则可能删掉私有包源 - 中科大镜像(
https://mirrors.ustc.edu.cn/composer/)同步更及时,遇到阿里云镜像 404 时可临时切换
parallel-downloads 设多少才合适?
默认并发数是 5,对国内镜像太保守;设太高又容易触发 DNS 超时或 file_put_contents(/tmp/): failed to open stream 错误。
- 实测 10–15 是安全区间:运行
composer config -g parallel-downloads 10 - 仅 Composer 2.2+ 支持,1.x 版本设了也无效——先执行
composer self-update - 它只加速 tarball 下载,不影响元数据检索,所以必须和镜像源配合才明显
- CI 环境中若报
Connection refused,优先降为 6 再试
哪些参数必须加进 CI/CD 命令?
本地开发可以容忍慢,但 CI 构建里每秒都算钱。composer install 不带关键参数,等于主动浪费资源。
-
--no-dev:跳过require-dev,省掉 30%–60% 时间 -
--prefer-dist:强制下 ZIP 包,避免 Git clone、SSH 认证、分支切换等开销 -
--optimize-autoloader:生成预编译类映射,减少运行时扫描 -
--classmap-authoritative:让自动加载器彻底跳过 PSR-4 发现逻辑——注意:开发机上误用会导致新增类直接报错 - 组合示例:
composer install --no-dev --prefer-dist --optimize-autoloader --classmap-authoritative
最容易被忽略的三件事
很多人配完镜像就以为万事大吉,结果还是慢。真正卡点常藏在缓存、插件和 CLI 环境配置里。
- 换源后必须执行
composer clear-cache,否则旧缓存仍拉取海外元数据 - 卸载已废弃的
hirak/prestissimo插件:composer global remove hirak/prestissimo,它在 Composer 2.x 中不仅无效,还可能引发静默降级 - CLI 模式下
opcache.enable_cli=1在 PHP 8.2+ 反而拖慢 Composer 自身加载,确认关闭:php -i | grep "opcache.enable_cli"输出应为Off


















