COMPOSER_CACHE_DIR 是跨平台唯一可靠方式覆盖 Composer 缓存路径,优先级高于 config 配置,需手动创建目录并验证;cache-vcs-dir 必须单独配置且不可推导;离线迁移应整体复制 cache 目录并清缓存;CI/Docker 中缓存路径须带版本标识且绝对路径挂载。

COMPOSER_CACHE_DIR 环境变量是跨平台唯一可靠方式
直接改 composer config --global cache-dir 在跨平台迁移时基本无效——它写入的是用户级 JSON 配置,而不同系统(Windows/Linux/macOS)对 ~ 解析不一致,且该配置优先级低于环境变量,一覆盖就失效。真正起作用、且被所有 Composer 版本(1.x/2.x)统一识别的,只有 COMPOSER_CACHE_DIR。
这个变量在启动时被 Composer 读取,路径解析由 PHP 的 realpath() 处理,天然兼容正斜杠 /,Windows 下也完全可用。
- Linux/macOS:在
~/.zshrc或~/.bashrc中加export COMPOSER_CACHE_DIR="/home/$USER/.composer-cache" - Windows PowerShell:在
$PROFILE中加$env:COMPOSER_CACHE_DIR="$HOME\composer-cache" - 必须手动创建目录:
mkdir -p "$COMPOSER_CACHE_DIR"(Linux/macOS)或mkdir "$env:COMPOSER_CACHE_DIR"(PowerShell) - 验证是否生效:
composer global show -v | grep "Cache directory",输出路径应与你设置的完全一致
cache-vcs-dir 必须单独配置,否则 Git 包每次重 clone
cache-vcs-dir 和 cache-dir 完全无关,Composer 不会自动推导它。如果你项目里用了 "type": "git" 的私有仓库,不配这个,每次 composer install 都会重新 git clone,哪怕缓存路径已隔离。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- Linux/macOS:
composer config --global cache-vcs-dir "$COMPOSER_CACHE_DIR/vcs" - Windows:
composer config --global cache-vcs-dir "%COMPOSER_CACHE_DIR%\vcs" - 注意:这条命令必须在每个用户环境下分别执行,不能只配一次;
cache-vcs-dir是独立配置项,不会随环境变量变化 - 验证:
composer config --global cache-vcs-dir应输出你设的路径,且该路径下应有github.com/xxx/yyy.git/类似结构
跨平台缓存迁移时,别碰 ~/.composer/cache/files 目录
想把旧机器的缓存“搬”到新机器?别直接复制 ~/.composer/cache/files。这个目录里的 ZIP 包虽然可复用,但前提是源机和目标机的 Composer 版本、PHP 小版本、甚至 OpenSSL 哈希算法都一致——稍有差异,dist.shasum 校验就会失败,报 Package not found。
- 最稳做法:在新机器上首次运行
composer install,让它自己拉包进新缓存;后续再用 CI 脚本或 Docker 挂载复用 - 若必须离线迁移,请打包整个
~/.composer/cache(含archived/、repo/、files/),并在新机器执行:composer config --global cache-dir "/your/new/path"+composer clear-cache - 特别注意 Windows 路径:
%APPDATA%\Roaming\Composer\Cache实际是C:\Users\XXX\AppData\Roaming\Composer\Cache,不能用~替代
Docker 和 CI 场景下,缓存路径必须挂载且带版本标识
在 GitHub Actions、GitLab CI 或 Docker 中,多个 job 或容器共用一个缓存路径,极易导致 repo/https---packagist.org/packages.json 被并发读写损坏,或不同 PHP 版本混用 dist 包引发 autoloader 错乱。
- 推荐格式:
/cache/composer-php$PHP_VERSION-composer$COMPOSER_MAJOR_VERSION - GitHub Actions 示例:
composer config --global cache-dir "$HOME/.composer-cache-php${{ matrix.php-version }}" - Docker 运行时必须显式挂载:
docker run -e COMPOSER_CACHE_DIR=/cache -v $(pwd)/cache-php8.2:/cache ... - 关键点:挂载路径必须是绝对路径,且不能是
/tmp(某些系统定期清理),也不能是 NFS 共享卷(内核可能静默拒绝写入)
跨平台缓存路径迁移最难缠的不是命令怎么写,而是权限和挂载点——Windows ACL、NFS 写入限制、Docker volume 权限、甚至 shell 启动方式(login shell vs non-login shell)都会让 COMPOSER_CACHE_DIR 看似生效实则静默失效。验证时别只看 composer config 输出,一定要跑一次 composer install -vvv,盯着日志里 Writing into cache 那行的实际路径。

















