必须指向files子目录;cache-files-dir需明确配置为~/.composer/cache/files等含files的绝对路径,仅设cache-dir无效,且composer_cache_dir环境变量优先级最高。

composer config --global cache-files-dir 必须指向 files 子目录
Composer 下载的 zip 包、解压后的 dist 文件,实际存放在 cache-files-dir 路径下,而不是 cache-dir 根目录。只配 cache-dir 是无效的——它只是父容器,真正起作用的是 cache-files-dir,且必须明确指向其下的 files/ 子目录。
- 正确配置示例(Linux/macOS/WSL):
composer config --global cache-files-dir ~/.composer/cache/files - Windows 正确写法:
composer config --global cache-files-dir "%APPDATA%\Composer\Cache\files"(注意:路径中不能含空格或中文,且%APPDATA%在 PowerShell 中不自动展开,建议用 CMD 或先查清真实路径) - 如果
composer config -g cache-files-dir输出为空,说明该配置未设置,缓存将 fallback 到默认行为,下载包不会被复用 - 改完后务必执行
composer clear-cache再跑一次composer install,然后检查目标路径下是否生成了哈希命名的.zip文件(如2a/2a3b4c5d...zip)
COMPOSER_CACHE_DIR 环境变量优先级最高,会覆盖所有 config 设置
如果你在 CI/CD 或 Docker 中看到缓存路径没生效,大概率是 COMPOSER_CACHE_DIR 被设了但值不对,或者根本没设——这个环境变量一旦存在,就会直接跳过 cache-dir 和 cache-files-dir 的所有配置。
- 验证方式:
php -r "echo getenv('COMPOSER_CACHE_DIR');",输出应为非空绝对路径(如/d/ci-cache) - 临时生效(Bash):
export COMPOSER_CACHE_DIR="/d/composer-cache" && composer install - 临时生效(PowerShell):
$env:COMPOSER_CACHE_DIR="D:\composer-cache"; composer install - 注意:该变量必须是绝对路径;它不解析
~或$HOME;进程退出即失效
缓存路径生效 ≠ 缓存命中,PHP 版本、lock 文件、镜像源三者必须完全一致
即使 cache-files-dir 指向正确目录、文件也真实存在,Composer 仍可能拒绝使用旧缓存——因为校验失败。这不是路径问题,而是内容一致性问题。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 三个关键锁定项:PHP 小版本(如 8.2.12 vs 8.2.15)、
composer.lock的完整 hash、镜像源 URL(如https://mirrors.aliyun.com/composer/vs 默认源) - GitHub Actions 中,
actions/cache@v4的key必须包含hashFiles('**/composer.lock'),不能只靠runner.os - Docker 构建时,若先
COPY . .再RUN composer install,会导致每次 lock 文件变更都让缓存失效;应把COPY composer.json composer.lock ./放在最前 - 改了镜像源却不清理旧缓存?Composer 会静默跳过已存在的文件,因为签名不匹配——结果就是“缓存目录占满,但命中率为 0”
临时路径隔离方案:项目级缓存比全局修改更安全
当全局缓存被污染、权限混乱或 CI 用户与配置用户不一致时,硬改 cache-files-dir 容易引发连锁故障。此时最稳的做法是绕过全局,把缓存直接挂到项目本地。
- 操作命令:
COMPOSER_CACHE_DIR="$(pwd)/.composer-cache" composer install - 前置准备:运行前先创建并授权:
mkdir -p .composer-cache && chmod 700 .composer-cache(Linux/macOS);Windows 需确保当前用户对目录有“完全控制” - GitLab CI 示例:
before_script: - mkdir -p .composer-cache && chmod 700 .composer-cache script: - COMPOSER_CACHE_DIR="$CI_PROJECT_DIR/.composer-cache" composer install
- 优势:不干扰其他项目、无需 sudo 权限、避免
~/.composer所有权错配(如 root 占用导致 Permission denied)
缓存路径本身不难设,难的是让它真正被用上——你得同时管住路径、权限、环境变量、PHP 版本、lock 文件、镜像源这六样东西。少盯住一个,就可能看到“缓存目录明明存在,却总在重复下载”的现象。










