如何让Composer在安装时自动选择最快的镜像源? (prestissimo插件)

9次阅读

不推荐使用prestissimo插件。该插件已停止维护,composer 2.0+原生支持并行下载(默认启用),强行安装易引发class not found或依赖解析失败等问题。

如何让Composer在安装时自动选择最快的镜像源? (prestissimo插件)

prestissimo 插件是否还值得用?

不推荐。prestissimo 已停止维护,且自 Composer 2.0 起,原生已内置并行下载(parallel-downloads 配置),默认启用、无需插件。强行安装 prestissimo 可能导致 composer install 报错或与新版 Composer 冲突,比如出现 Class PrestissimoPlugin not found 或依赖解析失败。

如何确认当前 Composer 是否启用并行下载?

Composer 2.2+ 默认开启并行下载,但可通过以下方式验证和微调:

  • 运行 composer config -g --list | grep parallel,查看 config.parallel-downloads 值(默认为 5
  • 若需手动设置,执行 composer config -g parallel-downloads 10(值建议保持在 5–15 之间,过高反而因 dns/连接争抢降低速度)
  • 注意:该配置仅影响下载阶段,不影响包解析或 autoloader 生成

镜像源切换必须靠手动配置,没有“自动选最快”的机制

Composer 本身不提供网络测速或动态镜像路由功能。所谓“自动选最快”,实际是用户通过脚本或工具预判后,再写入配置。国内常用做法是:

  • 使用 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ 切换阿里云镜像
  • 或用清华源:composer config -g repo.packagist composer https://packagist.phpcomposer.com(已停用)→ 应改用 https://mirrors.tuna.tsinghua.edu.cn/composer/
  • 如需临时覆盖(如 CI 环境),可在命令前加环境变量COMPOSER_REPO_PACKAGIST=https://mirrors.aliyun.com/composer/ composer install
  • 切勿混用多个镜像源——Composer 不支持 fallback 链式源,repo.packagist 是全局单点配置

真想“自动选最快”?得自己加一层脚本

可写一个简单 shell 脚本,用 curl -o /dev/NULL -s -w '%{time_total}n' URL 测几个主流镜像的响应时间,取最低值后自动执行 composer config -g repo.packagist。但要注意:

  • 测速结果受本地网络、DNS 缓存、cdn 节点影响,一次测速不代表长期最优
  • 镜像同步延迟(如阿里云/腾讯云通常滞后主站数分钟)可能引发 Package not found 错误,尤其安装非常新的版本时
  • 生产环境建议固定使用一个稳定镜像(推荐阿里云),而非追求毫秒级差异
#!/bin/bash urls=(   "https://mirrors.aliyun.com/composer/"   "https://mirrors.tuna.tsinghua.edu.cn/composer/"   "https://packagist.org/" ) best_url="" min_time=999 for url in "${urls[@]}"; do   t=$(curl -o /dev/null -s -w '%{time_total}' "$url" 2>/dev/null || echo "999")   if (( $(echo "$t < $min_time" | bc -l) )); then     min_time=$t     best_url=$url   fi done if [ -n "$best_url" ]; then   composer config -g repo.packagist composer "$best_url"   echo "switched to: $best_url (latency: ${min_time}s)" fi

镜像源的稳定性比绝对速度重要得多,尤其在自动化部署中——一次同步延迟导致的失败,远比慢几百毫秒更难排查。

text=ZqhQzanResources