Composer 无内置命令直接列出缓存包名与版本映射表,因缓存按哈希组织且无索引;需通过 composer diag 获取真实缓存路径,再结合 ls -1 cache/files/vendor/name/ 查看版本对应哈希目录,并依赖安装日志(如“Loading from cache”)确认缓存状态。

Composer 没有内置命令能直接列出“已缓存的包名+版本”映射表。它不维护一份可查的缓存索引,所有缓存内容都按哈希散列组织在文件系统里。想确认某个包是否被缓存过,只能进目录手动翻,或靠 composer install / composer update 的日志反推。
怎么找到当前生效的缓存根目录
别猜路径,也别翻文档记默认值——composer diag 输出的 Cache directory 行才是真实生效路径,它综合了 COMPOSER_CACHE_DIR 环境变量、全局配置、项目配置三者的优先级,比 composer config cache-dir 更可靠。
- 运行
composer diag,找带Cache directory:的那一行(例如Cache directory: /home/user/.composer/cache) - 如果输出为空或报错,检查当前是否在项目根目录下;不在的话,
composer diag仍会读全局配置,但某些插件缺失时可能失败 - Windows 用户注意:
%APPDATA%\Composer\Cache和%LOCALAPPDATA%\Composer\cache都可能出现,以diag输出为准,别混用 - 权限问题常被忽略:若缓存目录属主不是当前用户(比如 Docker 容器内 UID 不匹配),Composer 会静默跳过写入,导致你以为“没缓存”,其实是“写失败”
缓存目录结构怎么看懂哪些包被缓存了
Composer 缓存分两块:repo/ 存元数据(JSON),files/ 存实际 zip 包。真正代表“某个版本被缓存过”的,是 files/ 下的子目录结构。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 进入
files/目录后,路径形如vendor/name/2a3b4c5d...,其中2a3b4c5d...是 dist URL 的 SHA256 哈希或 Git commit hash,每个 hash 文件夹对应一个具体版本 - 运行
ls -1 ~/.composer/cache/files/vimeo/psr-http-message/能看到多个 hash 文件夹,每个都代表一个缓存过的版本(如 v1.0.0、v2.1.0) - hash 本身不直接显示版本号,但你可以用
composer show vendor/name查该包所有可用版本,再对比composer.lock里记录的 dist url,算出对应 hash(实践中更常用的是:装完后立刻去files/里找新出现的 hash) -
repo/目录下是压缩的 JSON,里面含包名和版本列表,但它是按源(如 packagist.org)分片的,不是按包名组织,不适合人工浏览
如何快速验证某个包版本是否已缓存
与其翻目录猜 hash,不如用 Composer 自己的行为来验证:它会在安装时明确告诉你“从缓存加载”还是“从网络下载”。
- 删掉当前项目的
vendor/和composer.lock,只留composer.json - 执行
composer install -vvv(加-vvv显示详细日志) - 观察输出中类似
Loading from cache或Downloading https://.../dist/...的行——前者说明该 dist 已缓存,后者说明要重下 - 若想单独测某一个包,先
composer require vendor/name:version,再删vendor/vendor/name,重新composer install,看它是否走缓存 - 注意:如果包用了
source方式安装(非 dist),缓存位置在files/下但 hash 对应的是 commit,且不会触发Loading from cache提示,得去files/里手动搜 commit hash
清理缓存时容易误删的关键点
composer clear-cache 会清空整个 cache/ 目录,但有时你只想删某个包的旧版本缓存——这时不能只删 files/vendor/name/ 下的部分 hash,还得同步清理 repo/ 里关联的 JSON 片段,否则下次 update 可能读到过期元数据。
- 安全做法:用
composer clear-cache全清,或手动删files/vendor/name/全部子目录(不碰repo/) - 若必须保留
repo/,删files/后,再运行一次composer update --dry-run,让 Composer 重建所需元数据 - CI 环境中挂载宿主机缓存目录时,务必确保容器内用户 UID/GID 与宿主机一致,否则删完看似成功,实际文件权限不对,后续写缓存仍失败
-
archives/目录已弃用,新版 Composer 不再使用,看到也不用管
真正麻烦的不是“怎么查”,而是缓存内容和版本号之间没有直接映射关系——你得靠 hash 反推,或靠安装日志确认。日常管理建议把 composer diag 和 ls -1 ~/.composer/cache/files/ 当成固定组合动作,而不是依赖某个“一键列表”命令。

















