composer缓存路径默认为linux/macos的~/.composer/cache、windows的%localappdata%\composer\cache,全局共享;实际生效路径须用composer diag查看cache directory行,环境变量composer_cache_dir优先级最高,配置后需验证目录可写且有新增files/、repo/子目录。

Composer 缓存路径默认不随项目走,而是全局共享的——Linux/macOS 在 ~/.composer/cache,Windows 在 %LOCALAPPDATA%\Composer\Cache(不是 %APPDATA%,新版已切换)。但这个“默认”极易被覆盖,且 Composer 从不报错,只静默退回到默认路径,导致你以为改成功了,其实缓存还在老地方写。
怎么确认当前真正生效的缓存路径
别信 composer config --global cache-dir 的输出——它只显示配置值,不反映运行时真实路径。真正起作用的是 Composer 启动时解析后的结果:
- 运行
composer diag,找 Cache directory: 那一行,这才是它此刻实际读写的路径 - 或者删掉旧缓存(
composer clear-cache),执行一次composer require monolog/monolog --no-install,然后立刻检查你设的路径下是否有新生成的repo/和files/子目录 - 如果
composer diag显示Cache is not working due to permissions,说明路径存在但不可写,Composer 已自动 fallback 到默认位置
改缓存路径最稳的方式是设 COMPOSER_CACHE_DIR 环境变量
这个环境变量优先级最高,能彻底绕过所有 config 配置,适合 CI/CD、Docker、多用户机器等场景:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- Linux/macOS:在
~/.zshrc里加export COMPOSER_CACHE_DIR="/mnt/ssd/composer-cache",然后source ~/.zshrc - Windows PowerShell:
$env:COMPOSER_CACHE_DIR="D:\composer-cache";CMD:set COMPOSER_CACHE_DIR=D:\composer-cache - Docker:必须在
Dockerfile中用ENV COMPOSER_CACHE_DIR=/cache,并挂载卷:-v $(pwd)/cache:/cache - 路径里不能带英文双引号,
COMPOSER_CACHE_DIR="/path/with space"是错的;含空格请用符号链接或换路径
composer config --global cache-dir 容易踩的坑
这条命令看似简单,但实际生效受多重干扰:
- 如果
COMPOSER_CACHE_DIR环境变量已设置,它会被完全忽略——优先级低于环境变量 - 路径必须是绝对路径,
~/my-cache不解析波浪号,./cache会相对于当前执行目录,一换路径就失效 - 目标目录必须提前创建,且当前用户有
rwx权限(Linux/macOS 下 execute 权限缺一不可,否则进不去目录) - 改完不会迁移旧缓存,得手动
rsync -av ~/.composer/cache/ /new/path/或清空重来
为什么改了路径却没提速、也没看到缓存文件
缓存目录只影响「本地复用」环节,不解决网络下载瓶颈。常见静默失败原因:
- 路径挂载在 NFS 或受限 Docker volume 上,内核拒绝写入,但 Composer 不报错,只退化成无缓存模式反复拉包
- CI 环境中设了
COMPOSER_CACHE_DIR却没挂载持久卷,每次构建都是空目录 - 之前用
root跑过composer global require,旧缓存属主是root,普通用户无法写入新路径 - 缓存和
vendor/是两回事——删vendor/不清缓存,改缓存路径也不影响已有vendor/,但新install会走新路径
真正容易被忽略的是:Composer 写失败时几乎不提示,只会安静地切回默认路径。验证是否真用了新缓存,唯一可靠动作是去那个目录看 archived/ 和 repo/ 是否有新增内容——而不是看命令输出或配置文件。










