--prefer-dist 通常更快,因直接下载预构建压缩包,跳过 git 克隆等开销;但私有包无 dist、缓存损坏或镜像未同步时可能失效甚至更慢。

为什么 --prefer-dist 通常更快
Composer 默认在安装包时会先尝试用 --prefer-source(克隆 Git 仓库),尤其当包有 dev- 版本或你本地配置了 "preferred-install": "source"。源码方式需要完整 clone、checkout、处理 .git 目录,网络开销和解压时间都更大。--prefer-dist 强制走压缩包(zip/tar)分发路径,直接下载预构建的归档文件,跳过 Git 操作,对多数稳定版包更轻量。
哪些场景下 --prefer-dist 可能没效果甚至变慢
不是所有包都提供 dist 归档,尤其是私有仓库或未配置 dist 字段的 composer.json。此时 Composer 会自动 fallback 到 source,命令看似生效实则无效。另外,如果本地缓存损坏、镜像源未同步 dist 包、或网络对 CDN(如 GitHub Releases)限速,--prefer-dist 反而比走公司内网 Git 服务器更慢。
- 检查包是否支持 dist:运行
composer show vendor/package,看输出里是否有dist行且type是zip或tar - 确认镜像源是否同步 dist:国内用阿里云镜像时,
https://mirrors.aliyun.com/composer/支持 dist,但某些自建镜像可能只同步 source - 避免全局设死:不要在
~/.composer/config.json里写"preferred-install": "dist",这会让所有包强制走 dist,包括那些没 dist 的
正确使用 --prefer-dist 的三种方式
它只是个 flag,不改变依赖解析逻辑,只影响安装阶段的获取策略。最稳妥的是按需加在具体命令后:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 首次安装:运行
composer install --prefer-dist(前提是composer.lock已存在) - 新增依赖:用
composer require vendor/package --prefer-dist,新包走 dist,已有包不变 - 重装全部:先删
vendor/和composer.lock,再执行composer install --prefer-dist—— 注意这会重新生成 lock 文件,版本可能变动
别在 composer update 里滥用 --prefer-dist:update 主要解决依赖冲突和版本升级,dist/source 对解析无影响,强行加只会让部分包换获取方式,没必要。
--prefer-dist 和缓存、镜像的关系
它的速度提升高度依赖本地缓存和镜像质量。Composer 下载 dist 包前会查 ~/.composer/cache/files/,命中则秒装;没命中才走网络。如果你经常清缓存,或在 CI 环境每次都是干净环境,--prefer-dist 的优势会被削弱。
- 确保开启缓存:检查
composer config -g cache-dir是否指向有效路径,权限是否可写 - 配合国内镜像:在项目根目录运行
composer config repo.packagist composer https://mirrors.aliyun.com/composer/,比默认 packagist.org 的 dist CDN 更稳 - 注意权限陷阱:Docker 构建中若以非 root 用户运行 composer,
--prefer-dist下载的 zip 解压可能因权限失败,报错类似failed to open stream: Permission denied,需提前 chown 缓存目录
真正卡顿的地方往往不在 --prefer-dist 这个开关本身,而在缓存是否热、镜像是否准、网络是否直连 dist CDN——开关只是最后一环。










