<p>Composer不提供内置命令查看包磁盘大小,需用du -sh vendor/* | sort -hr | head -20(Linux/macOS)或PowerShell脚本统计实际占用,并注意排除tests/docs等非运行时文件。</p>

composer show -D 不能直接显示磁盘大小,得换思路
Composer 自带的 composer show -D 只列出依赖树和版本,不提供文件体积信息。想看真实磁盘占用,必须绕过 Composer 的抽象层,直接查 vendor/ 目录下的实际文件大小。
用 du 命令统计 vendor 下各包体积(Linux/macOS)
最直接有效的方式是结合系统命令 du,按目录大小排序,快速定位“吃空间大户”:
-
du -sh vendor/* | sort -hr | head -20:显示前 20 个最大依赖包,单位自动适配(K/M/G) - 加
--max-depth=1避免递归过深拖慢速度;-h保证可读性,-r是逆序(最大在前) - 注意:
vendor/composer/和vendor/bin/也会计入,但它们本身很小,不影响主判断 - 如果项目用了
composer install --no-dev,记得先确认当前是否包含require-dev包——它们同样占空间,但可能不该被计入生产环境评估
Windows 下用 PowerShell 替代 du
PowerShell 没有原生 du,但可用 Get-ChildItem + Measure-Object 实现等效效果:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
Get-ChildItem .\vendor\ -Directory | ForEach-Object {
$size = (Get-ChildItem $_.FullName -Recurse -File | Measure-Object -Property Length -Sum).Sum
[PSCustomObject]@{Name=$_.Name; SizeMB=[math]::Round($size/1MB, 2)}
} | Sort-Object SizeMB -Descending | Select-Object -First 20这段脚本会输出每个 vendor 子目录的总大小(MB),并按降序排。注意它跳过符号链接和权限受限目录——若某包是通过 path repo 方式本地加载的,可能不被统计到。
为什么不能依赖 composer dump-autoload 或 lock 文件?
composer.lock 记录的是包哈希与下载 URL,不存体积元数据;composer dump-autoload 只生成类映射,和磁盘无关。有人试图解析 lock 中的 dist.size 字段,但那只是压缩包下载体积(如 tar.gz),解压后往往膨胀 3–5 倍,且不含 vendor 内自动生成的文件(如 PHPUnit 的 bootstrap、Laravel 的 compiled config)。
真正要优化部署包体积或排查 CI 构建缓慢,必须测解压后的 vendor/ 实际占用——尤其是含大量测试文件、文档、前端资源(如 node_modules 在包里)的包,比如 phpunit/phpunit 或 laravel/framework 的 dev-only 资源。

















