运行 composer config cache-dir 可查看当前生效的缓存目录绝对路径,其值取决于环境变量、配置层级(项目>用户>系统)及系统约定路径,未显式设置时按优先级自动推导。

composer config cache-dir 查看当前缓存路径
Composer 默认把下载的包、压缩包、元数据等存在本地缓存目录,路径不是固定死的,会因系统、用户、是否全局安装而变化。直接运行 composer config cache-dir 就能输出当前生效的缓存目录绝对路径。
- 在项目根目录下执行,读取的是该项目
composer.json或composer.lock关联的配置(可能被自定义覆盖) - 在任意目录执行,读取的是全局配置(通常是用户 home 下的
composer/config.json) - 如果输出为空,说明没显式设置过,Composer 正在用默认逻辑推导路径 —— 这时候得看下一节
默认缓存路径怎么算出来的
Composer 没硬编码路径,而是按优先级尝试多个位置,最终选第一个存在的可写目录。核心逻辑是:先查环境变量,再查系统约定位置。
-
COMPOSER_CACHE_DIR环境变量设了就用它(注意大小写,Windows 下可能是composer_cache_dir) - 没设变量时,Linux/macOS 默认走
$HOME/.cache/composer - Windows 默认走
%LOCALAPPDATA%\Composer\cache(比如C:\Users\Alice\AppData\Local\Composer\cache) - 如果主目录不可写(比如某些 CI 环境),它会 fallback 到系统临时目录,例如
/tmp/composer-cache
cache-dir 被改过但不生效?检查配置层级冲突
Composer 配置分三类:系统级(/usr/share/composer/config.json)、用户级(~/.composer/config.json)、项目级(./composer.json 中的 config 字段)。优先级是项目 > 用户 > 系统,但项目级默认不继承用户级的 cache-dir,除非显式写 "config": {"cache-dir": "..."} 。
- 执行
composer config --list --global查用户级配置,确认cache-dir是否真被 set 过 - 执行
composer config --list(无--global)看当前上下文实际生效的值,注意输出里有没有(global)标记 - 如果项目
composer.json里有"config"块,哪怕只配了"sort-packages": true,也会屏蔽掉用户级的cache-dir,必须手动补上
想临时换缓存位置?别改 config,用环境变量更干净
改 config 会持久化写入配置文件,CI/CD 或多项目场景容易串。临时切换推荐环境变量,且优先级最高,不用动任何配置文件。
- Linux/macOS:
COMPOSER_CACHE_DIR=/path/to/tmp/composer-cache composer install - Windows cmd:
set COMPOSER_CACHE_DIR=C:\temp\composer-cache && composer install - PowerShell:
$env:COMPOSER_CACHE_DIR="C:\temp\composer-cache"; composer install - 注意:该变量只影响当次命令,不影响后续操作,也避免污染全局状态
$HOME 可能指向意外位置,或者 /tmp 被清理导致缓存失效。真要排查,先 echo $HOME 或 echo %USERPROFILE%,再对照 Composer 源码里 Cache/CacheManager.php 的 getCacheDir() 实现逻辑核对。










