dist包是预构建压缩包,不含.git目录和历史,适合生产部署;source包是git克隆的完整仓库,含.git可调试修改,适合开发维护。

Dist 包是预构建的压缩包,Source 包是 Git 克隆的完整仓库——选哪个不看“好不好”,而看“你要不要改它”。
Dist 包到底装了什么?
Dist 是 Composer 从 Packagist 或 GitHub Releases 下载的 .zip 或 .tar.gz 文件,解压即用。它不含 .git 目录、没提交历史、没测试代码、没开发脚本,只有运行所需的源文件和 composer.json。
- 默认行为,
composer install不加参数就走 dist - 校验靠 SHA256 签名,下载后自动比对,安全性高
- 体积小:比如
monolog/monologdist 解压后约 120KB,source 则超 30MB(含完整.git) - 镜像友好:腾讯云、阿里云等 Composer 镜像只缓存 dist,
--prefer-dist能命中 CDN;--prefer-source会绕过镜像直连 GitHub,可能被墙或超时
Source 包为什么必须用 git clone?
Source 是执行 git clone 拉下来的完整仓库,保留 .git 目录、所有分支、标签、提交历史。你进 vendor/some/package 能直接 git log、git checkout dev-main、甚至 git commit 打本地 patch。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 不是所有机器都装了 git:CI 镜像(如
php:alpine)默认没git,--prefer-source会卡在Cloning into 'vendor/xxx' - 私有仓库要认证:GitHub/GitLab 的 SSH key 或
auth.json必须配好,否则 clone 失败 - 某些包根本没配 source URL:运行
composer show vendor/package -f=source,若输出为空或dist,加--prefer-source也白搭 - 配置项写错就全项目翻车:
"preferred-install": "source"放全局或写成"monolog"(漏掉/),会导致所有包强制 source,CI 构建变慢、缓存失效
怎么确认当前装的是 dist 还是 source?
别猜,直接验证:
- 进
vendor/some/package,执行ls -a | grep git:有.git就是 source - 运行
composer show some/package -f=source:输出含vcs表示 source,dist表示压缩包 - 注意:已有
vendor不会因改配置自动重装,必须删掉再跑composer install - 更关键的是:即使你这次用了
--prefer-source,下次composer update可能悄悄切回 dist(比如新版本匹配了已发布的 tag),你打的 patch 就没了
最常被忽略的一点:dist 和 source 不是开关,而是偏好。Composer 会按包实际支持情况自动降级——你加了 --prefer-source,但对方包没 source 字段,照样下 dist;反过来,某包禁用 dist(只留 source),--prefer-dist 也会失效。所以查 composer show 比看命令更可靠。










