直接改composer_cache_dir环境变量更可靠,因其优先级最高且启动时校验可写性;而composer config --global cache-dir仅写配置不验证路径有效性,易因权限、路径不存在等原因静默回退至默认缓存位置。

直接改 COMPOSER_CACHE_DIR 环境变量,比用 composer config --global cache-dir 更可靠。后者只写配置、不校验路径有效性,而环境变量优先级最高,且 Composer 启动时会真实检查可写性。
为什么 composer config --global cache-dir 经常失效
这个命令只是往 ~/.composer/config.json 里写一行配置,但不会验证路径是否存在、是否有写权限、是否含空格或中文。即使你执行成功,composer diag 显示的 Cache directory 仍可能是默认路径——因为 Composer 在目录不可写时会静默 fallback,不报错也不提示。
- 运行
composer diag,认准输出中Cache directory:那一行,这才是真实生效路径 - 如果看到
Cache is not working due to permissions,说明路径存在但没权限,Composer 已退回到~/.composer/cache -
~在命令里不展开,必须用绝对路径,比如/data/composer-cache,不能写~/cache
Linux/macOS 上正确设置方式
在 ~/.zshrc 或 ~/.bashrc 末尾加:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
export COMPOSER_CACHE_DIR="/mnt/ssd/composer-cache" mkdir -p "$COMPOSER_CACHE_DIR"
然后执行 source ~/.zshrc(或对应 shell 配置文件)。关键点:
- 必须
mkdir -p提前创建目录,否则首次运行composer install会因写入失败降级到默认路径 - 挂载到 SSD 路径能显著提升缓存读取速度,特别是
files/和repo/子目录频繁访问 - 别设在
/tmp下——某些系统定时清理,缓存隔天就丢
CI/CD 中必须注意的并发污染问题
在 GitHub Actions、GitLab CI 等共享 runner 上,多个 job 共用一个缓存目录会导致元数据读写冲突,轻则安装失败,重则 autoload 错乱。解决方法是按 PHP 版本隔离:
- GitHub Actions:在
env中设COMPOSER_CACHE_DIR: ${{ runner.temp }}/composer-cache-${{ matrix.php-version }} - GitLab CI:在
before_script中写export COMPOSER_CACHE_DIR="$HOME/.composer-cache-$PHP_VERSION" - 缓存 key 必须基于
composer.lock哈希,不能只用分支名或时间戳,否则 lock 文件变更后仍命中旧缓存
真正起作用的是环境变量和目录权限,不是配置文件里那行 JSON。每次改完,删掉旧缓存、跑一次 composer require monolog/monolog --no-install,再进目标目录看有没有生成 repo/ 和 files/ 子目录——没生成,就是路径或权限还没到位。










