COMPOSER_CACHE_DIR是唯一生效的缓存路径环境变量,优先级最高,不依赖配置文件或命令行参数;必须用绝对路径、手动创建目录并确保读写权限,否则静默回退默认路径。

COMPOSER_CACHE_DIR 是唯一生效的缓存路径环境变量
Composer 不识别任何其他自定义环境变量来控制缓存路径,COMPOSER_CACHE_DIR 是硬编码在源码中的唯一入口。它优先级高于全局配置、项目配置甚至 composer.json 里的 cache-dir 字段——后者根本不会被 install/update 命令读取。你设了 FOO_CACHE=/tmp/foo,Composer 完全无视;但只要 COMPOSER_CACHE_DIR=/tmp/composer-cache,它就会立刻切换路径,不写配置、不改文件、不依赖命令行参数。
环境变量优先级比 config --global 高,但不自动迁移旧缓存
即使你用 composer config --global cache-dir /home/user/.my-composer-cache 永久改过路径,只要当前 shell 中设置了 COMPOSER_CACHE_DIR,Composer 就会无条件使用它。但要注意:COMPOSER_CACHE_DIR 生效后,旧缓存(比如默认的 ~/.composer/cache)不会自动复制或链接过去。首次运行 composer install 时,它会在新路径下从零开始拉包,不会复用已有文件。如果你希望保留历史缓存,得手动 cp -r ~/.composer/cache/* $COMPOSER_CACHE_DIR/,且确保目标路径已存在并可写。
CI/Docker 中设了环境变量却没生效?先检查三件事
常见静默失败不是因为变量没设,而是执行时被忽略:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
export COMPOSER_CACHE_DIR="/tmp/cache"后没运行mkdir -p /tmp/cache→ Composer 写入失败,自动 fallback 到默认路径,但composer diag仍显示你设的路径,极具迷惑性 - Docker 容器以
root用户运行,但挂载的缓存目录属user:users→ 权限拒绝,同样静默回退 - CI 脚本里变量设在某个子 shell 或 if 分支里,实际执行
composer install的上下文未继承该变量 → 查看env | grep COMPOSER确认是否真在当前进程可见
验证是否真走环境变量路径,别信 composer config 输出
composer config --global cache-dir 只读配置文件,和实际行为无关。真正可信的验证方式只有两个:
- 运行
composer diag,盯住Cache directory:这一行输出,它反映的是 Composer 当前决定使用的路径 - 执行一次
composer install后,立刻去磁盘对应路径下ls -l,看是否有新生成的repo/、files/目录和时间戳新鲜的文件
路径解析逻辑是单向覆盖:环境变量 → 全局 config → 默认路径。一旦中间某环失败(比如权限不足),它不会报错,而是直接跳到下一环——这个“静默降级”机制最容易让人误以为环境变量生效了。

















