composer不处理帧率或动画导出,仅管理依赖包;帧率是gif编码时的运行时参数,由imagick等扩展动态控制,不影响vendor目录体积。

Composer 本身不处理视频帧率或动画导出——这是常见误解。你看到的“动画导出”“帧速率”实际来自图像处理库(如 Intervention、Imagick 或前端工具),不是 Composer 的功能范畴。Composer 只负责下载和管理这些依赖包。
为什么改帧速率不会影响 composer install 体积
帧速率(如 10fps / 30fps)是 GIF 或视频编码时的运行时参数,由 PHP 扩展(Imagick)或 JS 工具(gif.js)在生成文件时动态控制。它不改变包的源码结构、不新增文件、也不触发 Composer 下载额外内容。
- 修改
$im->setIteratorIndex()或->setImageDelay()只影响内存中帧的渲染逻辑,不写入 vendor 目录 -
vendor/里任何包的磁盘大小,只取决于它自带的 PHP 类、测试、文档、二进制资源(如 Chromium 副本),跟你的业务代码怎么调用它完全无关 - 如果你发现导出 GIF 体积变大,真正原因通常是:
->setImageDelay(10)导致总帧数不变但单帧停留时间拉长 → 浏览器/播放器可能插值补帧 → 实际输出仍是原始帧,但某些工具会重采样或加元数据
哪些 Composer 包真会影响动画文件体积
真正让最终 GIF/PNG 动画体积失控的,是那些在 vendor/ 里悄悄塞进大量非运行时资源的包:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
spatie/browsershot:自带 Chromium 二进制,单个目录常超 100MB,和动画导出无关却占满磁盘 -
intervention/image:本身轻量,但若你装了ext-imagick并启用 GIF 支持,它会依赖系统级 ImageMagick —— 这部分不在 vendor 里,但容易误判为 Composer 问题 -
laravel/framework:含大量resources/stubs/和测试 fixture,其中有些是 2MB+ 的示例 GIF,被git archive打包进 dist 版本 - 前端类 PHP 包(如
laravel-mix):把整个node_modules/塞进 vendor,动画构建脚本可能顺带打包未压缩的 WebP 源图
怎么确认是动画逻辑还是依赖包在拖累体积
别猜,直接定位磁盘占用源头:
- Linux/macOS:
cd vendor && du -sh */ | sort -hr | head -10—— 看谁占前几 MB - Windows PowerShell:
Get-ChildItem vendor -Directory | ForEach-Object { [PSCustomObject]@{Name=$_.Name; Size=(Get-ChildItem $_.FullName -Recurse | Measure-Object Length -Sum).Sum} } | Sort-Object Size -Descending | Select-Object -First 10 - 重点检查大目录里有没有:
.git/(说明拉了完整仓库)、node_modules/、build/、examples/、tests/—— 这些都不是运行时必需的 - 执行
composer why-usage vendor/package-name查清它是不是被某个动画相关包间接拉入(比如guzzlehttp/psr7被aws/aws-sdk-php拉进来,而你其实只用它上传 GIF)
真正影响动画导出体积的,永远是图像处理逻辑本身(压缩质量、尺寸、颜色表大小、是否去重帧),而不是 Composer。但如果你的 vendor/ 里混进了几百 MB 的 Chromium 或未裁剪的文档集,部署时就会卡住——这点最容易被忽略。










