不能。composer show -s 仅显示源码地址和安装状态,不提供磁盘占用信息;需用 du(Linux/macOS)或 PowerShell(Windows)统计 vendor 各包体积,并通过 --no-dev 和 .gitattributes 裁剪冗余文件瘦身。

composer show -s 能看到每个包体积吗?
不能。composer show -s 只显示包的源码地址和安装状态,不包含磁盘占用信息。依赖体积得靠外部工具或手动查——因为 Composer 本身不记录、也不计算 vendor/ 下每个包占了多少 MB。
怎么快速统计 vendor 里谁吃掉了最多空间?
用系统命令最直接,不用装额外 PHP 工具:
- Linux/macOS:
du -sh vendor/* | sort -hr | head -20(按大小倒序取前 20) - Windows(PowerShell):
Get-ChildItem vendor | ForEach-Object { [PSCustomObject]@{Name=$_.Name; Size=(Get-ChildItem $_.FullName -Recurse | Measure-Object -Property Length -Sum).Sum} } | Sort-Object Size -Descending | Select-Object -First 20
注意:有些包体积大是因为带了 tests/、docs/、examples/ 或大量二进制资源(比如 laravel/framework 的 resources/),这些往往不是运行时必需的。
composer install --no-dev 和 .gitattributes 谁更省空间?
--no-dev 是基础操作,但省不了多少——它只跳过 require-dev 包,不影响已安装包内部的冗余文件。真正见效的是配合 .gitattributes 做“安装时裁剪”:
- 在包根目录放
.gitattributes,写入:tests/ export-ignore、docs/ export-ignore、examples/ export-ignore - Composer 默认用
git archive拉 zip 包(如 packagist 上的 dist 包),会尊重这个规则 - 不是所有包都配了
.gitattributes,所以效果取决于你用的包是否主动维护了它
顺带一提:composer install --optimize-autoloader 不影响体积,只加速类加载;别指望它“瘦身”。
哪些依赖类型最容易悄悄膨胀 vendor?
三类要重点盯住:
- 前端工具链类:比如
laravel-mix、@vue/cli,它们依赖大量 Node.js 工具,但被当 PHP 包装进vendor/(尤其用php artisan ui类命令时) - 带预编译二进制的包:像
spatie/browsershot或某些 PDF 处理库,可能自带 Chromium 或 Ghostscript 二进制,单个就 100MB+ - 历史遗留的“全量发布”包:有些包没切 dist,每次
composer update都拉完整 Git 仓库(含 .git 目录),实际只需要 src/
遇到异常大的包,先 ls -la vendor/xxx 看有没有 .git、node_modules、build/ 这类明显不属于 PHP 运行时的目录——那基本就是误装或设计缺陷。










