–prefer-dist 通常更快,因为它下载预构建的压缩包而非完整 git 仓库,省去 clone、检出、清理等步骤,依赖 cdn 加速且不依赖本地 Git;私有包若无 dist 配置则自动回退 source。

默认情况下 composer 就用 --prefer-dist,你不需要显式加它——除非你之前全局设置了 --prefer-source 或当前项目有特殊配置。
为什么 --prefer-dist 通常更快?
它下载的是预构建的压缩包(如 vendor/foo/bar/1.2.3.zip),而非完整 Git 仓库。省去 git clone、检出分支、清理 .git 目录等步骤,尤其对大依赖(如 symfony/symfony)效果明显。
- 压缩包由 Packagist 预生成并托管在 CDN 上,直连快、缓存友好
- 不依赖本地 Git 安装或网络连通性(
--prefer-source会尝试git clone,失败就卡住) - 但注意:某些私有包若未配置
dist信息(比如没设dist.type和dist.url),Composer 会自动 fallback 到 source
如何确认当前是否真走 dist 流程?
加 -v(verbose)运行安装命令,观察日志里是否出现 Downloading 这类行;如果看到 xxx.zip from https://api.github.com/...Cloning ,说明走了 source。https://github.com/... to /path/to/vendor/...
- 检查是否误启用了
--prefer-source:运行composer config --global --list | grep prefer,看有没有preferred-install设为source - 检查项目级配置:
composer.json中是否有"config": { "preferred-install": "source" } - 临时强制 dist:
composer install --prefer-dist(即使全局设了 source,这条命令也能覆盖)
加速 dist 下载的三个实际手段
单纯加 --prefer-dist 不等于“快”,关键在源和网络路径:
- 换国内镜像源:
composer config -g repo.packagist composer https://packagist.phpcomposer.com(已停用)→ 改用https://packagist.laravel-china.org或更稳定的https://mirrors.aliyun.com/composer/ - 启用并调大 Composer 的并发下载数:
composer config -g github-protocols https git(避免 HTTPS 限速),再加composer config -g process-timeout 3000防超时中断 - 删掉
vendor和composer.lock后重装,有时旧 lock 文件锁住了过时的 dist URL(比如原指向 GitHub Release ZIP,现镜像已更新路径)
真正影响速度的往往不是参数本身,而是源是否可用、dns 是否污染、以及你的机器能否稳定连接到镜像 CDN 节点——--prefer-dist 只是把“快的路径”暴露出来,前提是你得先把它配对。