composer本身不提供包体积统计功能,必须用du -sh vendor/* | sort -hr定位大包;vendor/composer和vendor/bin非第三方包,不应作为优化目标;真正需关注的是tests/docs等非运行时目录及--no-dev安装策略。

Composer 本身不提供任何包体积统计能力,composer show、composer show -s、composer show --installed 全都不返回磁盘占用数据——它们只读元信息,不扫描文件系统。真要看谁占空间,必须用系统命令直接查 vendor/ 目录。
用 du -sh vendor/* | sort -hr 快速定位前 N 大包
这是最轻量、最可靠、无需安装插件的方法,适用于 Linux/macOS:
-
du -sh vendor/*统计每个一级子目录(即每个包)的总大小,-h输出 MB/GB 单位,-s跳过子目录逐项打印 -
sort -hr按人类可读格式倒序排列,最大值在最前 - 加
| head -20只看前 20 名,避免刷屏 - 常见错误:漏掉
*写成du -sh vendor,结果只显示vendor目录自身(通常极小) - 注意:某些包如
symfony/symfony或laravel/framework是单目录多组件结构,vendor/symfony/下还有十几个子目录,仅查一级会低估——可改用du -sh vendor/*/vendor/* vendor/*/src vendor/*/tests 2>/dev/null | sort -hr | head -20补漏
Windows 用户别硬刚 PowerShell,用 WSL 或 Git Bash
PowerShell 的 Get-ChildItem + Measure-Object 命令虽能跑通,但计算慢、易出错、单位是字节需手动换算,且对符号链接和硬链接处理不一致。更务实的做法:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 装 WSL2(推荐 Ubuntu),进项目根目录后直接跑
du -sh vendor/* | sort -hr | head -20 - 或装 Git Bash,它兼容绝大多数 Linux 命令,
du行为与原生一致 - 别信
disk_total_space('vendor')这类 PHP 函数——它返回的是整个分区剩余空间,不是vendor目录大小 - 如果必须用 PowerShell,至少加
2>/dev/null避免因权限/损坏包中断输出
vendor/composer 和 vendor/bin 不代表“大包”,别被误导
这两个目录常出现在 du 排名前列,但它们不是第三方包,也不该被当成优化目标:
-
vendor/composer里主要是autoload_static.php、installed.json和类映射缓存,体积通常几 MB,删了会导致Class not found -
vendor/bin是软链接集合(如phpunit → ../phpunit/phpunit/phpunit),本身几乎不占空间;真正吃体积的是它指向的目标包里的二进制(比如phpstanPHAR 文件) - 看到
vendor/bin占大头?先ls -la vendor/bin看链接指向哪,再du -sh查那个目标包 - 某些包(如
spatie/browsershot)自带 Chromium 二进制,体积动辄 100MB+,这种才该优先排查
别只盯着单个包大小,--no-dev 和 .gitattributes 才是关键
一个包标称“20MB”,实际运行时可能只需 2MB——其余 18MB 是 tests/、docs/、examples/ 或 .git 目录。这时候:
- 先确保部署环境用
composer install --no-dev,否则phpunit、infection这类 dev-only 包会白占空间 - 检查大包是否支持
.gitattributes裁剪:比如symfony/symfony的tests/目录有export-ignore规则,用--prefer-dist安装时会被跳过 - 手动进大包目录运行
du -sh */ | sort -hr,快速识别膨胀源:若tests/或resources/占比超 70%,基本可判定非运行必需 -
composer install --optimize-autoloader不影响磁盘体积,只优化加载速度,别指望它“瘦身”
真正难处理的永远不是“哪个包大”,而是“为什么这个包要把 node_modules 或 .git 打进 dist 包里”——遇到这种包,要么提 issue,要么 fork 后自己删再 publish,没有捷径。










