--prefer-dist是偏好而非强制开关,仅在包声明dist字段时生效,否则自动fallback至source;需配合镜像源优化和清除lock文件才能确保加速效果。

prefer-dist不是开关,是“有就用,没有就算”
--prefer-dist 不会强制 Composer 去下载压缩包。它只是说:“如果这个包在 Packagist 上声明了 dist 字段(比如 "url": "https://api.github.com/.../tarball/2.10.0"),就优先走这个路径;如果没有,Composer 会自动退回到 --prefer-source 行为(git clone),全程不报错、不提醒。”
这意味着你加了 --prefer-dist,但看到日志里出现 Cloning https://github.com/monolog/monolog.git,完全正常——那个包可能根本没配 dist,或者你装的是 dev-feature/x 这种开发分支,Packagist 根本不生成 dist 归档。
- 私有 GitLab 仓库默认不启用 archive 功能 → 即使加
--prefer-dist,也必然 fallback 到 source -
path类型仓库(如"mylib": {"type": "path", "url": "../mylib"})压根不参与 dist/source 选择逻辑 - Composer 2.2+ 默认行为就是
--prefer-dist,所以你在本地跑composer install没加参数,大概率已经在走 dist
什么时候必须显式加 --prefer-dist?
不是“想快就加”,而是某些环境里不加就根本跑不通:
- Docker 构建阶段:基础镜像没装 Git,或容器内没配 SSH key / GitHub token →
--prefer-dist是唯一能成功安装的方式 - CI/CD 流水线:避免反复 clone 同一仓库,绕过 Git 认证超时、浅克隆配置等不稳定环节
- 只读文件系统部署(如部分 PaaS):source 方式需要写
.git目录,直接失败 - 团队成员本地全局设了
preferred-install: "source",但你想临时覆盖 →composer install --prefer-dist能立刻生效,且不改配置
项目级 preferred-install 配置比 --prefer-dist 更稳妥
命令行参数每次都要输,容易漏;而 composer.json 里的配置会被所有人、所有 CI、所有 Docker 构建继承:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
在项目根目录 composer.json 的 config 段加:
{
"config": {
"preferred-install": "dist"
}
}
注意:"preferred-install": "dist" 是策略提示,不是强制指令。它仍会 fallback,但保证行为一致。
- 别用
composer config -g preferred-install dist全局设置 —— 它会影响你所有项目,包括别人拉你代码后的行为 - 要精细控制?用对象形式:
"preferred-install": {"acme/*": "source", "*": "dist"},只对自家命名空间走源码 - 通配符匹配是前缀匹配:
"myorg/*"匹配myorg/utils,但不匹配utils/myorg
怎么确认当前到底走的是 dist 还是 source?
最直接的办法是加 -v 看日志:
- 看到类似
Downloading <code>monolog/monolog2.10.0 (https://api.github.com/.../tarball/2.10.0) → 走 dist - 看到
Cloning <code>https://github.com/monolog/monolog.git→ 走 source - 检查是否被覆盖:
composer config --list | grep preferred-install(查项目级)、composer config -g --list | grep preferred-install(查全局) - 删掉
vendor和composer.lock重装,有时旧 lock 文件锁住了已失效的 dist URL
真正卡慢的往往不是参数本身,而是镜像源是否可用、DNS 是否污染、本地能否稳定连上 CDN 节点 —— --prefer-dist 只是把“快的路径”暴露出来,前提是你得先把它配对。










