composer config --global cache-files-dir 才控制 zip/tar 包存储路径,cache-dir 仅设缓存根目录;必须显式配置 cache-files-dir 为绝对路径并确保权限,否则归档失效。

composer config cache-dir 改的是缓存根目录,不是归档文件路径
很多人以为 composer config --global cache-dir 能控制 zip/tar 包存哪,其实它只改缓存顶层目录(比如 ~/.composer/cache),而归档文件实际存在子目录 archived/ 下。你配了 cache-dir,archived/ 会自动建在它下面,但不能单独指定 archived/ 的位置。
归档路径由 cache-files-dir 决定,必须显式配置
Composer 真正把下载的 .zip/.tar.gz 包写到哪,取决于 cache-files-dir 配置项。它默认是 cache-dir 下的 files/ 子目录,但可以独立设置:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
composer config --global cache-files-dir "/data/composer-cache/files"- 路径必须存在且当前用户有读写权限,否则后续 install 会报
failed to open stream - 不要用波浪号
~,必须写绝对路径,例如/home/user/composer-cache/files - 改完后运行
composer clear-cache再执行一次composer install,立刻检查该路径下是否生成了哈希命名的 zip 文件
cache-files-dir 配错会导致归档完全不生效
常见失效现象包括:反复下载同一包、composer config -g cache-files-dir 输出为空、CI 构建中磁盘占用高但命中率为 0。根本原因往往是:
- 只配了
cache-dir,没配cache-files-dir(后者必须手动设) - 路径指向父目录(如
/data/composer-cache),但 Composer 要求它必须精确指向files/子目录 - Docker 或 CI 中未透传
COMPOSER_CACHE_DIR环境变量,导致进程读不到配置 - Windows 下路径含空格或中文,Composer 静默 fallback 到默认路径
验证归档路径是否真正被使用
别只看配置输出,要确认运行时行为:
- 执行
composer config -g cache-files-dir,必须返回非空绝对路径 - 运行
php -r "echo getenv('COMPOSER_CACHE_DIR');",确保环境变量已加载(尤其 Docker) - 安装一个新包后,直接
ls -l $(composer config -g cache-files-dir),应看到类似5a7b2c3d4e5f67890123456789012345.zip的文件 - 如果用 GitHub Actions,
actions/cache@v4的 key 必须包含hashFiles('**/composer.lock'),否则即使路径对,缓存也不会复用
composer.lock 哈希、镜像源 URL 三者强绑定;任一变动,旧归档即作废。最易忽略的是:换了个镜像源却没清缓存,结果目录里全是“幽灵 zip”——看得见,用不上。










