composer如何查看已安装包的大小_composer统计包体积【技巧】

2次阅读

不能。composer show 只显示包名、版本、描述和依赖关系,不包含磁盘占用信息;需用 du 命令手动统计 vendor 下各包体积,如 cd vendor && du -sh */ | sort -hr | head -20。

composer如何查看已安装包的大小_composer统计包体积【技巧】

composer show 能不能直接看到包体积

不能。composer show 只显示包名、版本、描述和依赖关系,不包含磁盘占用信息。它读的是 composer.lockvendor/ 目录元数据,但不会扫描文件系统大小。

用 du 命令手动统计 vendor 下各包体积

最直接有效的方式是结合 du(disk usage)定位大包。注意必须进到 vendor/ 目录下操作,否则路径不准:

cd vendor du -sh */ | sort -hr | head -20

常见要点:

  • -s 表示汇总每个目录总大小,-h 以 KB/MB/GB 显示,-r 是倒序(最大在前)
  • 部分包含子命名空间(如 symfony/console),会出现在 symfony/ 目录下,所以只看一级目录会漏掉它们;可改用 du -sh */* | sort -hr 查二级
  • 某些包含大量测试或文档(如 phpunit/phpunit),实际运行时并不需要,可考虑用 --no-dev 安装或后期清理

为什么 vendor/bin 和 vendor/composer 占空间却不属于“包”

vendor/bin 是软链接集合,本身几乎不占空间;真正吃空间的是 vendor/composer/autoload_*.phpvendor/composer/installed.json 等缓存文件——它们体积小,但所有包的类映射都集中在这里。真正影响体积的永远是包自身的 src/tests/docs/vendor/ 嵌套依赖(比如一个包自带 node_modules)。

容易被忽略的一点:composer install --no-dev 不仅跳过 require-dev,还会阻止 dev 包的自动加载注册,但已下载的 dev 包文件仍留在 vendor/ 中——必须删掉后重装才真正减体。

有没有更轻量的自动化统计方式

可以写一行 shell 快速生成带排序的 csv 报表:

du -sk vendor/* 2>/dev/NULL | sort -nr | awk '{printf "%st%sn", $1, $2}' | sed 's/vendor///' | head -15

说明:

  • du -sk 用 KB 单位,避免小数,便于后续数值排序
  • 2>/dev/null 屏蔽权限错误(如某些 .git 目录不可读)
  • awk 调换字段顺序,让大小在前、包名在后,方便人眼扫视
  • 结果不含嵌套子包(如 monolog/monolog),如需完整覆盖,得遍历 find vendor -maxdepth 2 -type d -name composer.json -exec dirname {} ; 再逐个 du

真正的难点不在命令怎么写,而在于区分「必要代码」和「附带产物」——比如 laravel/frameworkresources/ 下的 stub 文件、doctrine/orm 里的 sql 方言测试数据,这些都不会被加载,却占几 MB。删之前务必确认是否被项目脚本引用。

text=ZqhQzanResources