因为 composer 本身不记录或计算磁盘占用,composer show 只输出元信息(版本、描述、依赖),不读取文件系统;真正占空间的是 vendor/ 下解压后的源码、测试文件、文档等,需用 du -sh vendor/* | sort -hr | head -n 20(linux/macos)或 powershell 等效命令统计。

为什么 composer show 不能直接看到包大小?
因为 Composer 本身不记录或计算已安装包的磁盘占用,composer show 只输出元信息(版本、描述、依赖),不读取文件系统。真正占空间的是 vendor/ 下解压后的源码、测试文件、文档甚至 .git 目录——这些全靠文件系统统计。
用 du 快速定位大包(Linux/macOS)
最直接有效的方式是结合 du 和 sort,在 vendor/ 目录下按大小排序:
du -sh vendor/* 2>/dev/null | sort -hr | head -n 20
说明:
-
du -sh:以人类可读格式(如 12M、3.2G)统计每个子目录大小 -
2>/dev/null:忽略权限错误(比如某些包含只读子目录) -
sort -hr:按大小逆序(-h支持 K/M/G 单位识别,-r降序) -
head -n 20:只看前 20 名,避免刷屏
注意:vendor/composer/ 是 Composer 自身缓存和 autoload 数据,通常很小;真正大户往往是 vendor/symfony/、vendor/laravel/framework 或带大量资源/测试的 SDK 包(如 aws/aws-sdk-php)。
Windows 用户怎么查?
PowerShell 可以等效替代:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
Get-ChildItem vendor | ForEach-Object { [PSCustomObject]@{ Name = $_.Name; Size = (Get-ChildItem $_.FullName -Recurse -File | Measure-Object -Property Length -Sum).Sum } } | Sort-Object Size -Descending | Select-Object -First 20 Name, @{Name="SizeMB";Expression={[math]::Round($_.Size / 1MB, 2)}}
关键点:
- 必须用
Get-ChildItem -Recurse -File遍历所有文件,否则会漏掉嵌套目录里的内容 -
[math]::Round(..., 2)避免显示超长小数 - 如果提示“访问被拒绝”,需以管理员身份运行或加
-ErrorAction SilentlyContinue
哪些包容易“虚胖”?怎么减?
常见膨胀来源不是代码本身,而是开发时残留物:
-
.git目录:某些包通过dist方式安装时不含 Git,但若用--prefer-source或镜像配置不当,会把整个仓库 clone 下来 -
tests/、docs/、examples/:Composer 默认不删这些,但它们可能占几 MB 到上百 MB -
vendor/bin/中的二进制工具(如phpunit、phpstan)本身不大,但它们的依赖树可能被重复拉取
减重建议:
- 确认是否真需要
--prefer-source;生产环境一律用--prefer-dist - 用
composer install --no-dev省掉开发依赖(如phpunit、mockery) - 对特定包启用
remove-vcs-ignore插件(如hirak/php-sql-parser的.git有 15MB)
别指望一键清空——有些包的测试文件被 autoload 引用,删了会报错;得逐个验证。










