composer_cache_dir环境变量优先级最高但未生效,主因是路径不存在、权限不足或未被进程继承;唯一可信验证方式是composer diag输出的“cache directory”行。

COMPOSER_CACHE_DIR 环境变量覆盖了旧配置,但没生效?
环境变量优先级最高,设了却无效,基本是路径未解析、权限不对或 shell 未重载。它不读 ~/.composer/config.json,也不管 composer config --global cache-dir 输出什么,只看进程启动时的 COMPOSER_CACHE_DIR 值是否合法。
常见错误现象:
-
composer diag显示Cache directory: /home/user/.composer/cache(默认路径),而不是你设的路径 - 新缓存没生成,
ls -l $COMPOSER_CACHE_DIR报No such file or directory - 执行
echo $COMPOSER_CACHE_DIR输出为空或含波浪号~
实操建议:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- Linux/macOS:在
~/.zshrc或~/.bashrc末尾加一行:export COMPOSER_CACHE_DIR="/mnt/fastdisk/composer-cache"(必须是绝对路径,不含~) - Windows PowerShell:
[Environment]::SetEnvironmentVariable("COMPOSER_CACHE_DIR", "D:\composer-cache", "User") - 路径必须提前创建:
mkdir -p /mnt/fastdisk/composer-cache - 确认属主和权限:
chown -R $USER:$USER /mnt/fastdisk/composer-cache(Linux/macOS);Windows 需右键目录 → “属性” → “安全” → 确保当前用户有“完全控制” - 新开终端验证:
echo $COMPOSER_CACHE_DIR和composer diag | grep "Cache directory"必须一致且可写
COMPOSER_HOME 改了,但全局插件命令找不到了
改 COMPOSER_HOME 后 composer global list 显示空,或报 Command not found,说明 Composer 找不到 $COMPOSER_HOME/vendor/bin 下的可执行文件——这个路径不在 PATH 里。
实操建议:
- Linux/macOS:在
~/.zshrc中补上这一行:export PATH="$COMPOSER_HOME/vendor/bin:$PATH" - Windows:把
%COMPOSER_HOME%\vendor\bin加进系统环境变量Path(不是用户变量),或用 PowerShell 运行:[Environment]::SetEnvironmentVariable("Path", "$env:COMPOSER_HOME\vendor\bin;" + $env:Path, "Machine") - 改完后重启终端,再运行
which laravel(假设装了 Laravel Installer)确认是否指向新路径下的 bin 文件 - 别漏掉
$COMPOSER_HOME/auth.json—— 如果用了私库,记得把旧~/.composer/auth.json复制过去,否则composer install会因认证失败静默跳过包
删了旧缓存,新路径下还是没生成 repo/ 和 files/ 子目录
这说明 Composer 根本没往你设的路径写,而是 fallback 到默认位置了。最常被忽略的是:环境变量虽设了,但被 Docker 容器、IDE 终端或 CI 脚本的子 shell 覆盖或未继承。
实操建议:
- 直接测运行时行为,别信配置值:
COMPOSER_CACHE_DIR=/tmp/test-cache composer require monolog/monolog --no-install && ls -A /tmp/test-cache—— 应看到repo/、files/、archived/ - Docker 用户必须在
Dockerfile里写ENV COMPOSER_CACHE_DIR=/cache,并在docker run时挂载:-v $(pwd)/cache:/cache - VS Code 内置终端可能不读
~/.zshrc,改用外部终端测试,或在 VS Code 设置里启用"terminal.integrated.profiles.linux": { "zsh": { "path": "/bin/zsh", "args": ["-i"] } } - 路径含空格?Composer 会静默失效。Windows 下避免
D:\my composer\cache,改用D:\cpcache或建符号链接:mklink /D D:\cpcache "D:\my composer\cache"
composer config --global cache-dir 和 COMPOSER_CACHE_DIR 同时存在,以谁为准?
COMPOSER_CACHE_DIR 永远胜出,它不经过任何配置层,是运行时硬编码的最高优先级。但问题在于:你可能以为自己只改了 config,却忘了某处脚本或 IDE 启动时顺手 export 了一个环境变量,导致行为不可预测。
实操建议:
- 查清所有来源:
env | grep COMPOSER(Linux/macOS)或Get-ChildItem Env:COMPOSER*(PowerShell) - 临时屏蔽干扰:运行
env -u COMPOSER_CACHE_DIR -u COMPOSER_HOME composer config --global cache-dir看是否还原为旧值 - CI/CD 场景下,禁止混用——统一用
COMPOSER_CACHE_DIR,并在 job 开头加echo "Cache dir: $COMPOSER_CACHE_DIR"日志留痕 - 别依赖
composer config --global cache-dir输出判断真实路径,唯一可信的是composer diag的Cache directory:行










