composer show --platform 显示当前项目已安装的平台包及其版本,不涉及缓存;查本地缓存版本需直接浏览 composer_cache_dir/files/ 目录下按 vendor/name/hash/ 组织的子目录。

composer show --platform 显示的是什么?
它只列出当前项目已安装的包及其版本,不涉及缓存。想查「本地缓存里存了哪些版本」,得绕开 show,用缓存目录本身说话。
直接看 COMPOSER_CACHE_DIR 目录结构
Composer 缓存包时按 vendor/name/ 的路径组织,每个包下是按 dist zip 或 source git commit hash 存的子目录。你不需要解压或读 metadata,只要看清目录名就能判断版本范围。
- 默认缓存路径是
~/.composer/cache(Linux/macOS)或%LOCALAPPDATA%\Composer\cache(Windows) - 关键子目录是
files/:里面全是vendor/name/→hash/这样的嵌套,hash通常是 dist URL 的 SHA256 或 Git commit,对应具体版本 - 运行
ls -l ~/.composer/cache/files/vimeo/psr-http-message/能看到多个 hash 文件夹,每个代表一个缓存过的版本(比如v1.0.0、v2.1.0对应不同 hash)
用 composer cache:clear 前先确认影响范围
清缓存不是全删干净——它只清 files/ 和 repo/,但不会动 archival/(已下载的 .zip/.tar.gz 归档)和 http/(HTTP 响应缓存)。所以即使清了,下次 install 仍可能秒装,因为归档还在。
-
composer cache:debug会输出实际路径和各子目录大小,比盲删靠谱 - 如果只想清理某包的缓存,得手动进
files/vendor/name/删对应 hash 目录,cache:clear不支持按包过滤 - CI 环境中常禁用缓存(
COMPOSER_CACHE_DIR=/dev/null),避免污染或误用旧 hash
为什么 composer why-not some/package 查不到缓存信息?
这个命令只查依赖约束冲突,跟缓存完全无关。它读 composer.lock 和 composer.json,不碰缓存目录。想确认某个版本是否在缓存中,唯一可靠方式就是去 files/ 下翻目录,或者用 find ~/.composer/cache/files -name "*some-package*" 快速定位。
缓存没元数据索引,也没有「包名→所有缓存版本」的映射表。它本质是 key-value 存储,key 是 dist URL 或 Git ref,value 是压缩包或克隆副本。所以别指望命令行能一键列出「laravel/framework 所有缓存过的历史版本」——得自己写脚本遍历,或者接受手动查目录的事实。










