生效,但仅在 composer 未显式指定 --cache-dir 时起作用,优先级低于命令行参数、高于默认路径;需确保路径有读写权限并用绝对路径设置。

COMPOSER_CACHE_DIR 环境变量是否生效?
生效,但仅在 Composer 未显式指定 --cache-dir 时起作用。它优先级低于命令行参数,高于默认路径(如 ~/.composer/cache)。如果执行 composer install --cache-dir /tmp/my-cache,COMPOSER_CACHE_DIR 就会被忽略。
如何正确设置 COMPOSER_CACHE_DIR?
直接导出环境变量即可,无需修改 Composer 配置文件:
export COMPOSER_CACHE_DIR="/path/to/your/cache"
常见使用场景包括 CI/CD 中避免重复下载、Docker 容器内挂载统一缓存目录、多项目共享缓存节省磁盘空间。注意路径需有读写权限,且建议使用绝对路径。
- Linux/macOS:加到
~/.bashrc或/etc/environment中长期生效 - Windows(CMD):
set COMPOSER_CACHE_DIR=C:\my-composer-cache - Windows(PowerShell):
$env:COMPOSER_CACHE_DIR="C:\my-composer-cache" - Docker 中推荐用
-e COMPOSER_CACHE_DIR=/cache -v $(pwd)/composer-cache:/cache
缓存目录结构和清理逻辑
Composer 缓存目录下包含 repo/(包元数据)、files/(下载的 zip/tar 包)、vcs/(Git 克隆副本)等子目录。执行 composer clear-cache 会清空整个 COMPOSER_CACHE_DIR 下内容,但不会影响 vendor/。
注意:不同 Composer 版本缓存格式略有差异(如 v2 引入了更细粒度的 repo 索引),混用多个版本时可能触发自动重建,导致首次运行变慢。
为什么设置了 COMPOSER_CACHE_DIR 却没看到缓存增长?
常见原因有三个:
- 项目根目录存在
composer.json但尚未运行过composer install或composer update - 所有依赖都命中了已安装的
vendor/,且无新包需要下载(可加-v查看详细日志,搜索Downloading或Cache hit) - 权限问题:Composer 启动用户无法写入指定缓存路径,此时会静默 fallback 到默认路径(可通过
composer config --global cache-dir查看实际生效路径)
最稳妥的验证方式是删掉 vendor/ 和 composer.lock,再运行 composer install -v,观察日志中缓存路径是否为你设定的值。










