<p>composer show 不显示磁盘占用,需用 du -sh vendor/* | sort -hr | head -20 查看各包大小,再结合 --no-dev 或脚本过滤 dev 依赖并计算占比。</p>

用 composer show 查不到磁盘占用,得换思路
composer show 只显示包名、版本和描述,不提供文件大小信息。磁盘占用是物理路径上的实际字节数,Composer 本身不采集也不暴露这个数据。必须结合系统命令或手动遍历 vendor/ 目录计算。
用 du -sh vendor/* 快速看各包目录大小
最直接的方式是在项目根目录运行:
du -sh vendor/* | sort -hr | head -20
说明:
- du -sh 按人类可读格式(如 12M、2.3G)统计每个子目录总大小
- vendor/* 展开为每个包的独立目录(如 vendor/laravel/framework)
- sort -hr 按大小逆序排列(-h 支持 K/M/G 单位识别)
- head -20 只看前 20 名,避免刷屏
常见陷阱:
- vendor/composer 目录很小但常被误认为“核心”,实际是 Composer 自身元数据,不用关注
- 有些包含大量测试文件或文档(如 phpunit/phpunit),du 统计的是全部内容,不是仅生产代码
- Windows 用户需用 Get-ChildItem vendor -Recurse | Group-Object Directory | Sort-Object Count -Descending 替代,但精度较低(不含精确字节)
排除 dev-only 包避免干扰真实依赖占比
开发依赖(如 phpunit、mockery)在生产环境不加载,却占大量空间。要聚焦“运行时真正需要的包”,需过滤掉 require-dev 中声明的包:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 先获取所有 require-dev 包名:
composer show --dev --no-ansi | cut -d' ' -f1 - 再从
du结果中排除:du -sh vendor/* | grep -vE "(phpunit|mockery|phpstan|psalm|larastan)"(按实际 dev 列表调整) - 更稳妥的做法:用
composer install --no-dev清理后再跑du,确保vendor/里只有 runtime 依赖
想导出 CSV 或自动算百分比?写个简单 shell 脚本
手动算占比太麻烦。下面这个脚本能输出带百分比的表格:
#!/bin/bash
total=$(du -sb vendor | cut -f1)
for dir in vendor/*/; do
[ -d "$dir" ] || continue
size=$(du -sb "$dir" | cut -f1)
name=$(basename "$dir")
pct=$(awk "BEGIN {printf \"%.1f\", $size*100/$total}")
echo "$name,$size,$pct"
done | sort -t',' -k2 -nr说明:
- du -sb 用字节单位避免单位换算误差
- sort -t',' -k2 -nr 按第二列(字节数)数值逆序排
- 输出是 CSV 格式,可直接粘贴进 Excel 或用 csvkit 进一步处理
- 注意:某些包名含点号(如 doctrine/orm),目录名是 doctrine-orm,脚本里用 basename 拿到的是实际目录名,不是 composer.json 里的逻辑名
真正难的不是算大小,而是区分哪些是“有效体积”——比如 symfony/console 里可能包含大量未使用的命令类,但 du 不管这些,只认文件系统字节。如果真要优化体积,得结合 composer dump-autoload --optimize 和删除未使用组件,而不是只盯着数字。

















