唯一可靠写法是 composer config --global cache-dir,必须用绝对路径;手动改 config.json 或设环境变量易因 json 错误导致静默失效,且 composer.json 中的 cache-dir 字段无效。

composer config --global cache-dir 是唯一可靠写法
直接改 ~/.composer/config.json 或手写环境变量不推荐——JSON 格式错一个逗号、引号没闭合,Composer 就静默跳过整个配置文件,后续所有命令都可能行为异常但不报错。
正确做法是用 Composer 自带命令写入,它自动处理路径拼接、JSON 序列化和作用域隔离:
- 运行
composer config --global cache-dir "/data/composer-cache"(必须是绝对路径) - 确保目标路径已存在:
mkdir -p /data/composer-cache - 确认当前用户有读写权限:
chown -R $USER:$USER /data/composer-cache - 执行后立刻生效,下次
composer install就会写入新路径,旧缓存不会自动迁移
为什么不能在 composer.json 里配 cache-dir
composer.json 中的 "config": {"cache-dir": "..."} 是无效的。这个字段只被 composer config 命令读取,install 或 update 完全忽略它。
常见误解来源:看到文档里有 config 字段就以为能全局控制缓存,其实它只影响 composer dump-autoload、vendor-dir 等少数项目级行为。
真正起作用的缓存路径由以下优先级决定:
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
- 环境变量
COMPOSER_CACHE_DIR(临时,仅当次命令) - 全局配置
cache-dir(即composer config --global cache-dir设置的值) - 默认 fallback 路径(
~/.composer/cache或%APPDATA%\Composer\Cache)
路径必须是绝对路径,且不能含波浪号 ~
composer config --global cache-dir ~/my-cache 不会报错,但实际失效——Composer 不解析 shell 的 ~ 符号,会尝试创建字面意义的 ~/my-cache 目录,最终静默回退到默认路径。
验证是否生效最简单的方法:
- 运行
composer config --global cache-dir,看输出是不是你设的完整绝对路径 - 运行
ls -ld $(composer config --global cache-dir),确认属主是你本人,权限可读写 - 删掉旧缓存(如
rm -rf ~/.composer/cache),再跑一次composer install,检查新路径下是否生成了archived/、repo/等子目录
COMPOSER_HOME 改动会影响 cache-dir 吗
会,但不是直接覆盖。Composer 的缓存路径推导逻辑是:COMPOSER_CACHE_DIR > cache-dir 配置 > $COMPOSER_HOME/cache。
也就是说,如果你只改了 COMPOSER_HOME(比如设为 /opt/composer),但没显式设置 cache-dir,那缓存就会落到 /opt/composer/cache —— 这其实是隐式生效,容易让人误以为 cache-dir 没起作用。
所以,如果想彻底解耦,建议只用 composer config --global cache-dir 显式指定,不要依赖 COMPOSER_HOME 推导;如果确实要换全局根目录,也应同步运行 composer config --global home "/new/path",避免配置和实际路径错位。










