preferred-install 配置强制指定包安装方式:设为 "dist" 优先下载压缩包,"source" 强制 Git 克隆,支持通配符精细控制;影响速度、磁盘占用及代码可修改性,且 update 时会彻底重装而非增量切换。

preferred-install 配置决定包是下载压缩包还是 Git 克隆
Composer 默认对稳定版本走 dist(即下载 zip/tar 包),对开发版本(如 dev-master)走 source(即 git clone)。但 preferred-install 会覆盖这个默认行为,强制指定安装方式,影响下载速度、磁盘占用、能否修改 vendor 代码等。
全局 / 项目级配置的写法和优先级
该配置可设在三个位置,优先级从高到低:项目根目录的 composer.json → 当前用户的 auth.json → 全局 config.json(composer config -g 修改)。项目级最常用,也最安全。
- 设为
"dist":所有包(包括dev-开头的)都尝试下载归档包;若包没提供dist(比如私有仓库未配archive),则退回到source - 设为
"source":一律执行git clone,哪怕装的是v2.5.0这样的稳定 tag - 设为
{"my-vendor/*": "source", "*": "dist"}:支持按包名模式精细控制,比如只对本地开发的包走源码,其余走 dist
dist 和 source 在实际使用中的关键差异
选错方式可能带来意料外的问题,尤其在 CI 或团队协作中:
-
dist安装快、占用小、不可修改(解压后无 .git 目录),适合生产环境;但无法直接调试或 patch vendor 里的代码 -
source安装慢、体积大(含完整 Git 历史)、可直接改 + commit + push,适合本地开发调试;但 CI 中若网络不稳定或私有 Git 服务不可达,会直接失败 - 某些包(如 Laravel 的官方包)同时提供
dist和source,但私有 GitLab 仓库若没启用archive功能,则即使设"preferred-install": "dist"也会静默 fallback 到source - 运行
composer install --prefer-dist或--prefer-source会临时覆盖配置,但不会写入composer.json
{
"config": {
"preferred-install": {
"acme/*": "source",
"monolog/monolog": "dist",
"*": "dist"
}
}
}
注意:preferred-install 不影响已安装包的更新策略——composer update 仍会按当前配置重新拉取。如果之前用 source 装过,后来改成 dist,update 时会删掉整个目录再重下 zip,不是增量切换。










