全局缓存路径由composer_home决定,默认为~/.composer/cache(linux/macos)或%appdata%composercache(windows);项目级config.cache-dir可覆盖,但必须是绝对路径且仅对当前项目生效。

全局缓存路径由 COMPOSER_HOME 或系统级配置决定,局部项目不改变它;但项目级 composer.json 中的 config.cache-dir 会覆盖全局设置——仅对该项目生效,且必须是绝对路径。
全局缓存路径在哪、怎么查
Composer 默认把缓存存在 ~/.composer/cache(Linux/macOS)或 %APPDATA%Composercache(Windows)。这不是“写死”的,而是由 COMPOSER_HOME 环境变量推导出来的:COMPOSER_HOME 指向哪,cache 子目录就在哪。
查真实路径最可靠的方式是:
- 运行
composer config --global cache-dir—— 输出的就是当前生效的全局缓存路径 - 如果输出为空,说明没显式配置过,那就走默认值(即
$COMPOSER_HOME/cache) - 想确认
COMPOSER_HOME实际值?运行composer config --global home
注意:改了 COMPOSER_HOME 环境变量后,必须重启终端或重新加载 shell 配置(如 source ~/.zshrc),否则 composer config 仍读旧值。
项目级 cache-dir 配置为什么常失效
很多人在 composer.json 里加了 "cache-dir": "cache" 就以为能切到项目内缓存,结果发现没用。原因很直接:
-
cache-dir值**必须是绝对路径**,相对路径(如"cache"或"./cache")会被 Composer 忽略,静默回退到全局路径 - 这个配置只影响当前项目执行
composer install或composer update时的缓存写入位置,不影响其他命令(比如composer global) - 它不会自动创建目录;如果指定路径不存在或不可写,Composer 会报错
Failed to create cache directory
正确写法示例(Linux/macOS):
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
{"config": {"cache-dir": "/path/to/my-project/.composer-cache"}}
Windows 下注意反斜杠要双写或用正斜杠:"C:/my-project/.composer-cache" 或 "C:\my-project\.composer-cache"。
缓存路径差异带来的实际影响
路径不同,直接影响的是「谁能看到缓存」和「会不会冲突」:
- CI/CD 构建中多个项目共用一个 runner 用户时,若都走默认全局缓存,容易因缓存污染导致安装失败(比如 A 项目缓存了某个包的旧版 dist,B 项目却期望新版)
- Docker 容器里没挂载
~/.composer/cache,每次构建都从零下载,速度极慢;这时用项目级绝对路径 + volume 挂载更可控 - 团队协作时,有人改了
COMPOSER_HOME指向 NFS 目录,结果所有人的缓存都挤在一个共享路径下,IO 成瓶颈 -
composer clear-cache默认清的是全局缓存;如果项目用了自定义cache-dir,得手动删那个目录,或加--no-cache绕过
真正隔离缓存的最小代价方式,是每个项目在 composer.json 里配好绝对路径,并确保该路径不被其他项目复用。
验证缓存是否真走指定路径
别信 composer config 的输出,它只告诉你“配置写了啥”,不反映实际行为。有效验证只有两种:
- 加
-v运行一次composer install,看日志里出现的Writing into cache...后面跟的路径是不是你预期的 - 装完后立刻检查目标缓存目录是否存在新文件:比如
ls -l $(composer config --global cache-dir)/files | tail -n 3(Linux/macOS),或dir %APPDATA%Composercacheiles(Windows)
特别注意:即使配置了项目级 cache-dir,composer global require 依然走全局缓存——因为它是全局命令,根本不读项目 composer.json。










