--prefer-dist并非强制下载压缩包,而是优先使用dist归档,若不可用则静默回退到source;生效需同时满足配置启用、命令指定及包本身提供有效dist字段。

composer install --prefer-dist 是唯一可靠方式。它强制 Composer 从 dist(归档包,如 tar.gz/zip)安装,跳过 source(Git 克隆),避免构建开销、网络依赖和本地 Git 环境干扰。
为什么默认可能装 source 包
Composer 在以下情况会退回到 source 安装:
- 包的
composer.json中未声明dist字段(常见于私有仓库或手动打包的包) - 本地
vendor/已存在该包的 Git 工作副本(比如之前用--prefer-source装过) - 启用了
config.prefer-stable: false且目标版本只有 source 发布(如 dev-master 未打 tag) - 包作者在
repositories中配置了"type": "vcs"且未提供 dist URL
如何确保始终走 dist 流程
必须同时满足三项条件:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 全局或项目级 config 显式启用:
composer config --global prefer-dist true或在composer.json的config块中写"prefer-dist": true - 执行命令时加
--prefer-dist(install/update/require均支持) - 确认目标包在 Packagist 或你的私有源中确实发布了
dist归档 —— 可通过composer show vendor/name -a查看每个版本是否含dist:行
常见误判:--no-dev 不影响 dist/source 选择
--no-dev 只控制是否安装 require-dev 下的包,和安装方式(dist vs source)完全无关。你可能看到 --no-dev 后安装变快,那只是因为少了包,不是因为切到了 dist。真正提速的关键是 --prefer-dist。
私有仓库必须提供 dist 才能生效
如果你用的是自建 Satis 或 Private Packagist,需确保:
- 生成的
packages.json中每个版本对象包含"dist": {"type":"zip","url":"https://.../xxx.zip","reference":"..."} - Git 类型仓库(
"type": "vcs")无法自动提供 dist;若想强制 dist,得改用"type": "package"并手写dist字段,否则 Composer 仍会 clone - CI 构建中若发现仍走 source,请检查
composer.lock里对应包的source字段是否存在 —— 若存在,删掉vendor/和composer.lock,再composer install --prefer-dist重生成
dist 包本质是预构建产物,不依赖本地 Git、PHP 扩展或编译环境;但它的前提是上游愿意提供、你配置没绕过它——漏掉任一环,Composer 就会安静地退回 source 模式,而你可能根本意识不到。

















