composer config --global cache-dir 只控制包缓存目录(archived/、repo/、files/),不涉及解压临时路径;默认路径为 Linux/macOS 的 ~/.composer/cache 或 Windows 的 %APPDATA%\Composer\Cache,须用绝对路径设置,且会被更高优先级的 COMPOSER_CACHE_DIR 环境变量覆盖。

Composer 缓存路径和临时文件路径是两套完全独立的机制,改错地方会导致“明明设了 cache-dir 却没生效”或“clear-cache 了还是解压失败”——必须分清。
composer config --global cache-dir 改的是哪个目录?
它只控制包缓存(archived/、repo/、files/)的存储位置,和安装时解压 ZIP 的临时过程无关。
- 默认路径:Linux/macOS 是
~/.composer/cache,Windows 是%APPDATA%\Composer\Cache - 必须用绝对路径设置,比如
composer config --global cache-dir /data/composer-cache,不能带~或相对路径 - 该配置写入
~/.composer/config.json,但会被环境变量COMPOSER_CACHE_DIR覆盖(后者优先级更高) - 改完后旧缓存不会自动迁移,要手动复制或重下;验证是否真在用,直接去目标路径看有没有
archived/子目录生成
COMPOSER_CACHE_DIR 环境变量为什么更可靠?
它是 Composer 内部读取缓存路径的最高优先级来源,不依赖配置文件是否存在或是否被挂载,适合 CI/CD 和容器场景。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- Linux/macOS:启动前执行
export COMPOSER_CACHE_DIR="/tmp/composer-cache" - Windows CMD:
set COMPOSER_CACHE_DIR=C:\temp\composer-cache;PowerShell:$env:COMPOSER_CACHE_DIR="C:\temp\composer-cache" - Docker 中务必在
run命令前设置,或在Dockerfile里用ENV COMPOSER_CACHE_DIR=/cache,并确保该路径已mkdir -p /cache && chmod 777 /cache - 路径中不能含空格或中文,且必须存在、可写;否则 Composer 会静默退回到默认路径,不报错也不提示
“Extracting archive” 卡住或 Permission denied 怎么办?
这不是缓存问题,而是 PHP 解压 ZIP 包时用的临时目录(sys_get_temp_dir())不可写或空间不足——这个路径 Composer 根本不提供配置项。
- 错误现象包括:
failed to open stream: Permission denied、卡在Extracting archive、CI 中反复失败但composer clear-cache无效 - 真正要改的是 PHP 层的临时路径,方法有三:
export TMPDIR="/your/writable/tmp"(Linux/macOS)、set TMP=C:\your\tmp(Windows CMD)、或运行时加php -d sys_temp_dir=/tmp/composer-tmp composer install - 验证是否生效:运行
php -r "echo sys_get_temp_dir();",输出必须是你设的路径 - CI/CD 容器里常见坑:默认
/tmp是内存文件系统(如 tmpfs),空间小且重启丢失;必须显式mkdir -p /tmp/composer-tmp && export TMPDIR=/tmp/composer-tmp,并确保挂载卷可写
为什么改了缓存路径,vendor 还是装得慢?
因为 vendor 安装速度主要取决于 ZIP 解压阶段(走 sys_get_temp_dir()),而不是缓存是否命中。哪怕包已缓存,只要临时目录慢或权限不对,就会卡在 Extracting。
- 缓存只跳过下载,不跳过解压;解压必须经过临时目录,且该目录与
cache-dir物理隔离 - 不要试图用
COMPOSER_CACHE_DIR解决解压失败问题——它对Extracting archive阶段完全无效 - 最易被忽略的一点:Docker 或 CI 环境中,
TMPDIR和COMPOSER_CACHE_DIR必须分别设置、分别验证;一个设错,另一个再对也救不了安装流程

















