composer默认用zip格式下载包,仅当包声明dist且未启用--prefer-source或"preferred-install": {"*": "source"}时才生效;私有/老旧包若无dist字段则自动回退至source。

Composer 默认就用 zip 格式下载包,所谓“使用 zip 架构减少流量”不是要你手动干预,而是确保它没被意外关掉、没被替换成低效方式。
为什么 composer install 有时不走 zip 下载?
Composer 在解析依赖时会根据 dist 和 source 两种来源做选择。只有当包声明了 dist.type: "zip"(或 tar、gzip),且你没强制要求源码(比如用了 --prefer-source 或配置了 "preferred-install": {"*": "source"}),它才会下载压缩包。
-
--prefer-source会跳过所有dist,直接 clone Git 仓库,体积大、速度慢、还依赖网络和 Git 客户端 -
"preferred-install": {"*": "source"}在config里全局设成 source,效果等同于加参数 - 某些私有仓库或老旧包没提供
dist字段,Composer 只能 fallback 到 source
如何确认当前安装走的是 zip 还是 source?
运行 composer install -v 或 composer update -v,观察每条下载日志:
- 看到类似
Downloading https://example.com/pkg-1.2.3.zip→ 走的是 zip - 看到类似
Cloning 123abcde from https://github.com/vendor/pkg.git→ 走的是 source - 如果日志里混着两种,说明部分包没提供 dist,或你本地配置干扰了策略
也可以临时加 --no-plugins --no-scripts 减少干扰,让输出更干净。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
file:/// 路径引用本地 zip 时,为什么解压失败或 autoload 不生效?
关键不在压缩格式本身,而在 ZIP 包的内部结构和元信息是否合规:
-
dist.url必须指向一个真实可读的file:///绝对路径(注意三个斜杠),相对路径在某些 PHP 环境下不可靠 - ZIP 解压后根目录必须直接包含
composer.json,不能套一层文件夹(比如mylib-1.0.0/composer.json就不行,得是composer.json) -
composer.json里必须有完整autoload声明,Composer 不会从 ZIP 里自动提取或推断 - 改过 ZIP 文件后,必须删掉
vendor/和composer.lock,再跑composer update,否则缓存可能复用旧内容
HTTP 压缩(gzip on the wire)和包内 zip 是两回事
别混淆传输层压缩和包格式压缩:"http-compression": true 是让 Composer 请求头带 Accept-Encoding: gzip,让远程服务器返回 gzip 压缩的 HTTP body(比如 JSON 元数据),它不影响最终下载的 .zip 文件本身是否被压缩。
这个配置只对元数据请求有效,对实际 zip 包下载无影响——因为 zip 包本身就是二进制压缩体,HTTP 层再套一层 gzip 效果有限,而且多数镜像站也不对 .zip 响应启用 gzip 编码。
真正影响流量的,是是否走 dist、是否命中缓存、以及镜像源的物理距离。压缩算法本身(zip vs tar.gz)在 Composer 里由包发布者决定,你无法 runtime 切换。










