composer gc 不清理旧版本安装包,仅删除 vendor 中未被 composer.lock 引用的包目录;真正清理缓存需用 composer clear-cache 或手动删除 ~/.composer/cache/ 中对应 hash 的 ZIP/source 文件。

Composer 的 gc 命令不会清理旧版本安装包 —— 它只删 vendor 目录里没被当前 composer.lock 引用的包,不碰 vendor/composer/archives/ 或全局 cache。
为什么 composer gc 看起来没效果?
这个命令实际作用非常有限:它只检查 vendor/ 下已安装的包,对比 composer.lock,把 lock 文件里没声明的包目录删掉。但以下内容完全不受影响:
-
vendor/composer/archives/里的 ZIP 缓存(每次 install/update 下载后留下的压缩包) -
~/.composer/cache/(或 Windows 上%APPDATA%\Composer\Cache\)里的完整包缓存(含 dist 和 source) - 旧版本包即使还在 lock 文件里,只要没被删掉,
gc就不会动它
真正能删旧版本包的命令是 composer clear-cache
这个命令清的是全局缓存,包括所有历史下载过的包(不同版本、不同哈希),不是只清“不用的”。执行后:
- 所有
distZIP、sourceGit clone 都从~/.composer/cache/删除 - 下次
composer install或update会重新下载需要的版本(走网络或本地镜像) - 不会影响当前
vendor/内容,也不动composer.lock
如果只想清缓存但保留部分常用包,目前 Composer 没提供按包名或版本过滤的选项;clear-cache 是全量操作。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
想精准删某个旧版本包?手动进 cache 目录删
Composer 缓存结构是按 vendor/name + dist/source + hash 组织的,例如:
~/.composer/cache/files/monolog/monolog/2a7b4e6f1c8d.../monolog-monolog-2a7b4e6.zip
你可以:
- 用
composer show monolog/monolog --all查看该包所有可用版本 - 用
composer depends monolog/monolog:1.25.0看谁依赖这个旧版(辅助判断是否真可删) - 进
~/.composer/cache/files/手动匹配路径删除特定 hash 对应的 ZIP 或 source 目录 - 注意:别删错
repo/子目录(那是包元数据缓存,删了下次 update 会慢一点)
日常存储优化建议
靠单次命令很难一劳永逸。更实用的做法是:
- 定期运行
composer clear-cache(比如每月一次),避免缓存膨胀到几个 GB - 在 CI 环境中加
--no-cache参数,跳过写缓存(适合只 build 不复用的场景) - 用
composer config -g cache-dir /dev/shm/composer-cache把缓存挂到内存盘(Linux),重启即清,省 SSD 寿命 -
vendor/本身不存历史版本 —— 只要没composer update,它就只保留lock里指定的那套,不用额外清理
真正占空间的大户永远是 cache,不是 vendor;而 gc 根本不碰 cache,这点最容易被忽略。

















