换镜像源需严格校验URL并清缓存:用composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/全局切换,再执行composer clear-cache;parallel-downloads设为10更优;CI部署应加--no-autoloader --no-scripts --no-plugins;DNS缓存和TLS问题常导致假性卡顿。

换镜像源不是选对URL就完事,得防Signature mismatch和缓存残留
Composer 2.x 对镜像签名验证极严,随便粘个旧链接或拼错 https://mirrors.aliyun.com/composer/ 就会直接报 Signature mismatch——这不是网络问题,是校验失败,重试一百次也没用。
- 必须用这条命令全局切换(别信项目级配置):
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 切完立刻清缓存:
composer clear-cache,否则它还在读本地旧索引,下载速度毫无变化 - 验证是否生效:
composer config -g repo.packagist,输出里必须有"url": "https://mirrors.aliyun.com/composer/" - 别用
composer config -g packagist.org false这类禁用操作——它会让私有包解析失效,尤其混用 GitLab 私仓时直接崩
parallel-downloads 不是越大越好,10 是多数机器的临界点
parallel-downloads 是 Composer 2.2+ 原生支持的并行机制,但默认只开 3 个并发,根本榨不干带宽;设太高又会触发 I/O 竞争,典型错误是 file_put_contents(/tmp/): failed to open stream。
- 全局启用:
composer config -g parallel-downloads 10(CPU 核心数 × 1.5,上限建议 10) - 它只对
composer install有效,composer update因要算依赖图,仍部分串行 - 如果报临时文件错误,降到
6或8再试 - 别再装
hirak/prestissimo——它在 Composer 2.x 中已失效,还可能静默降级为单线程
CI/部署阶段不加 --no-autoloader 和 --no-scripts,等于白优化
开发时需要自动加载、脚本钩子、插件,但 CI 构建或上线部署时,这些全是冗余。一个含 200+ 包的 Laravel 项目,加这两个参数能省掉 35%+ 的 install 时间。
-
composer install --no-autoloader --no-scripts --no-plugins(三者常一起用) -
--no-autoloader跳过生成vendor/autoload.php,后续用composer dump-autoload --optimize单独补 -
--no-scripts阻止执行post-install-cmd,避免意外触发前端构建、缓存清理等重型操作 - 注意:这样装出来的
vendor不能直接跑 PHP,必须补一次composer dump-autoload --optimize
DNS 缓存和 TLS 握手才是隐形卡点,别只盯着“网速”
换了镜像还卡在 Downloading... 且速度为 0 B/s?大概率是 PHP 的 cURL 复用 DNS 缓存,导致域名仍解析到海外节点;或者 OpenSSL 版本太老,TLS 握手反复失败。
- 强制绕过 DNS 缓存(Linux/macOS):
export COMPOSER_NO_INTERACTION=1,再运行命令 - 检查 TLS 支持:
php -r "print_r(curl_version());",看ssl_version是否为空或老旧(如 OpenSSL 1.0.2) - 临时调试可关 TLS:
export COMPOSER_DISABLE_TLS=true,但千万别提交进 CI 或生产环境 - Windows 用户注意:Git Bash 下的
composer可能调用错版本 PHP,改用 cmd 直接运行更可靠
最常被忽略的是 vendor 写入慢——并行下载快了,但解压后往 vendor/ 写几百个小文件时,macOS APFS 或 Windows Defender 会逐个拦截 file_put_contents,fsync 触发次数 ≈ 文件数,实际写入速度可能从 120MB/s 掉到 8MB/s。











