Composer默认不走source是因为优先使用dist(压缩包)以提升速度和节省带宽;需通过--prefer-source或配置preferred-install为source才能强制克隆源码,且仅当包声明有效source字段时生效。

为什么 composer install 默认不走 source?
Composer 默认优先使用 dist(压缩包)模式安装包,因为更快、更省带宽。但某些场景下必须用 source:比如你要调试 vendor 里的代码、打 patch、或依赖的包在 dist 中缺失了 git hooks / tests / .git 目录。这时光靠 composer install 不会自动切到 source,得明确告诉它“别下 zip,去 clone”。
composer install --prefer-source 是最直接的解法
这个参数强制所有包都走 git clone(前提是包有 source 信息,即 source 字段在 composer.json 的 dist 对应项里存在)。它不会改写 composer.lock,只是临时覆盖安装策略。
- 只对本次安装生效,不影响后续
composer update - 如果某个包没有 source(比如私有包没配
source或仅提供 zip),Composer 会 fallback 到 dist 并报 warning,不是 fatal error - 执行前确保本地有 git 且能访问对应仓库(比如 GitHub、GitLab),否则会卡在 clone 步骤
想永久默认走 source?改 config.json 更稳妥
全局或项目级配置可避免每次敲长参数。在项目根目录加 composer.json 的 config 段,或写进 ~/.composer/config.json:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
{
"config": {
"preferred-install": "source"
}
}
注意:"preferred-install" 支持三种值:"source"、"dist"、"auto"(默认)。设为 "source" 后,install 和 update 都会默认走 clone —— 但如果你 lock 文件里已记录了 dist 类型,它仍可能沿用 dist,除非你先删掉 vendor 和 composer.lock 再重装。
遇到 Failed to clone ... Could not resolve host 怎么办?
这是 source 模式最常卡住的地方,本质是 Composer 试图用 git 协议(如 git@github.com:... )或 https 克隆,但网络不通或认证失败。
- 先试
git ls-remote https://github.com/vendor/package.git看能否连通 - 若公司内网,检查是否需配置
git config --global url."https://".insteadOf git:// - 私有 GitLab/自建源要确认
composer.json里repositories的 type 是vcs,且 url 可被 git 访问(别用网页地址) - 不想折腾网络?临时切回 dist:
composer install --prefer-dist,再针对性地对某包强制 source:composer install --prefer-source --no-update && composer update vendor/package --prefer-source
source 模式看着简单,但实际成败往往卡在 git 环境和网络权限上,而不是命令本身。

















