composer config --global cache-dir 必须用绝对路径,~/composer-cache或./cache会静默失效;正确写法如/data/composer-cache或C:\Users\YourName\AppData\Local\Composer\Cache,路径需预先创建、用户有读写权限,并通过composer config --global cache-files-dir和composer diag验证是否真正生效。

composer config --global cache-dir 必须用绝对路径
直接写 ~/composer-cache 或 ./cache 会静默失效,Composer 不解析 shell 符号,也不接受相对路径。它会退回到默认位置(Linux/macOS 是 ~/.cache/composer,Windows 是 %LOCALAPPDATA%\Composer\Cache),且不报错、不提示。
正确做法是显式写出完整路径:
- Linux/macOS:
composer config --global cache-dir /data/composer-cache - Windows(CMD/PowerShell):
composer config --global cache-dir "C:\Users\YourName\AppData\Local\Composer\Cache"(含空格或反斜杠时必须加英文双引号) - 路径必须提前创建:
mkdir -p /data/composer-cache(Linux/macOS)或手动新建目录(Windows) - 当前用户需有读写执行权限:
ls -ld /data/composer-cache第三列应为你的用户名;Windows 上右键目录 → “属性” → “安全” → 确保当前用户有“完全控制”
验证是否真的生效,别只看 config 输出
composer config --global cache-dir 返回值只是配置项内容,不代表运行时实际使用。真正生效要满足三个条件:
-
composer config --global cache-files-dir必须返回非空路径(例如/data/composer-cache/files);若为空,补上:composer config --global cache-files-dir /data/composer-cache/files - 运行
composer clear-cache后,检查该路径下是否生成了files/、repo/、vcs/子目录 - 执行
composer install -vvv,搜索日志中Writing into cache行,确认路径与你设的一致 - 在 CI/Docker 中,还要运行
php -r "echo getenv('COMPOSER_CACHE_DIR');",确保环境变量已加载(尤其注意子进程如 VS Code 终端、GitHub Actions runner 不自动继承~/.zshrc设置)
共享缓存的关键:避免所有权错配和环境变量冲突
多人共用一台机器(如 CI 构建机、Docker 容器)时,缓存目录被 root 写入后普通用户就无法写入,典型报错是:failed to open stream: Permission denied,但错误路径里带的是完整绝对路径——那就是你要盯死的位置。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
修复方式不是 chmod -R 777,而是修正归属:
- 查归属:
ls -ld $(composer config --global cache-dir),如果显示root root就坐实了 - 改归属(Linux/macOS):
sudo chown -R $USER:$USER $(composer config --global cache-dir) - Docker 中不要用
RUN export COMPOSER_CACHE_DIR=...(只在构建层生效),改用ENV COMPOSER_CACHE_DIR=/tmp/composer-cache - CI 脚本里慎用
sudo composer config -g,它写的是 root 的配置,但 runner 实际以gitlab-runner或www-data用户运行
多项目共享缓存 ≠ 多环境自动复用
缓存命中依赖三个要素同时一致:PHP 版本、composer.lock 内容、镜像源 URL。任一变动,缓存就失效,变成“幽灵目录”——看着在,实则从不命中。
常见翻车点:
- 本地开发用阿里云镜像,CI 却走 packagist.org 默认源 → 缓存文件存在但校验失败,被跳过
- GitHub Actions 中
actions/cache@v4的key没包含hashFiles('**/composer.lock'),只用runner.os→ 锁文件一变,缓存 key 就不同 - Docker 构建时没把
COPY composer.json composer.lock ./放在COPY . .前面 → 缓存层被跳过,每次重装依赖 - 只设了
COMPOSER_HOME,以为缓存也跟着挪了 → 实际COMPOSER_CACHE_DIR还在默认路径,磁盘悄悄爆满

















