--prefer-source让Composer改用git clone而非下载.zip包,保留.git目录和完整历史,专用于开发调试、打补丁或贡献代码,但会增安装时间与磁盘占用。

什么是 --prefer-source,它到底改了什么?
启用 --prefer-source 后,Composer 不再下载预构建的 .zip 包,而是直接克隆 Git 仓库(或 SVN/Hg 等 VCS),并保留完整历史和 .git 目录。这主要影响本地开发调试、打补丁、查看 commit 记录等场景,但会显著增加安装时间和磁盘占用。
全局设置 --prefer-source 的三种方式
不推荐无差别全局开启,但若团队统一要求源码模式,可选以下任一方式:
- 写入全局 config:
composer config -g prefer-source true - 写入项目 config:
composer config prefer-source true(修改当前目录下composer.json的config.prefer-source字段) - 设环境变量:
COMPOSER_PREFER_SOURCE=1(Linux/macOS)或set COMPOSER_PREFER_SOURCE=1(Windows cmd)
注意:环境变量优先级最高,会覆盖 config 设置;config 方式更稳定,适合 CI/CD 中显式控制。
require 时临时启用 --prefer-source
最常用也最安全的做法——只对特定包或单次安装生效:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 安装新包时:
composer require vendor/package --prefer-source - 重装已有包:
composer update vendor/package --prefer-source - 全量重装(慎用):
composer install --prefer-source(仅对 lock 文件中未指定dist的条目生效)
特别注意:--prefer-source 对已缓存的 dist 包无效,首次运行需加 --no-cache 或清空 ~/.composer/cache 才能强制走源码路径。
为什么有些包死活不走 source 模式?
不是所有包都支持 --prefer-source,常见原因有:
- 包的
composer.json中声明了"dist": {...}且未提供"source"字段 - 包托管在不支持 Git 克隆的平台(如某些私有 Nexus 仓库只暴露 ZIP 下载端点)
- 网络策略拦截了
git clone(比如企业防火墙屏蔽 9418 或 22 端口),此时 Composer 会静默回退到 dist - 你正在使用
platform-check或install-paths插件,它们可能绕过 source 逻辑
验证是否生效,看安装日志里有没有类似 Cloning [commit-hash] from [repo-url] 的输出;如果只有 Downloading [url].zip,说明 fallback 成功了,但 source 没走通。

















