–prefer-dist 用于生产环境,下载预构建压缩包,安装快、占空间小;–prefer-source 用于开发调试,克隆完整 git 仓库,支持修改和提交。

在 composer 中,--prefer-dist 和 --prefer-source 是控制依赖包安装方式的两个关键选项,它们影响的是包的获取来源和本地存储形式,直接关系到安装速度、磁盘占用和后续开发便利性。
什么时候用 –prefer-dist?
这是 Composer 的默认行为,适用于大多数生产环境或普通使用场景。它会优先从包的发布版本(如 github 的 Release ZIP 包、Packagist 提供的压缩包)下载预构建的归档文件。
- 安装更快:跳过 Git 克隆和历史检出,直接解压二进制包
- 占用空间更小:不含 Git 元数据和开发分支历史
- 适合部署:包内容稳定、可预期,不依赖远程仓库可用性
- 执行命令:
composer install --prefer-dist或composer update --prefer-dist
什么时候用 –prefer-source?
当你需要修改依赖源码、调试底层逻辑、或贡献补丁时,应使用该选项。它会通过 Git(或其他 VCS)克隆整个代码仓库到 vendor/ 目录下,并保留完整提交历史和分支信息。
- 支持本地修改和提交:可直接在
vendor/xxx中改代码、打补丁、切分支 - 便于调试和跟踪:能用
git blame、git log查看变更来源 - 适合开发阶段或维护 fork:例如你正在为某个包提 PR,需基于其 dev-main 分支开发
- 执行命令:
composer install --prefer-source(注意:首次安装后,后续composer update默认仍走 dist,除非显式指定)
如何设置为项目默认行为?
不必每次输入参数,可在项目根目录的 composer.json 中配置:
- 全局设为 prefer-dist:
"config": { "preferred-install": "dist" } - 全局设为 prefer-source:
"config": { "preferred-install": "source" } - 按包类型区分(推荐):
"preferred-install": { "*": "dist", "dev-*": "source" }—— 比如让所有 dev 包走 source,稳定版走 dist
一个小提醒:–prefer-source 不等于 –dev
这两个选项无关:--dev 控制是否安装 require-dev 中的包;而 --prefer-source 只决定已选包的获取方式。即使你不装 dev 包,也可以对正式依赖启用 source 安装。
基本上就这些。选哪个不复杂,但容易忽略背后的实际影响——要快就 dist,要改就 source。