cache-dir 必须用绝对路径,否则静默失效;Composer 不解析 ~ 或 $HOME,需显式写全路径并手动创建目录,验证以 composer diag 输出为准,离线场景需同步整个缓存目录并配置 COMPOSER_CACHE_DIR 环境变量。

cache-dir 必须用绝对路径,否则静默失效
Composer 完全不解析 ~ 或 $HOME 这类 shell 展开符号。执行 composer config --global cache-dir ~/composer-cache 看似合理,实际不会报错,但配置根本没生效——它会悄悄 fallback 到默认缓存路径(Linux/macOS 是 ~/.cache/composer,Windows 是 %LOCALAPPDATA%\Composer\Cache)。
唯一可靠写法是显式写出完整绝对路径:
- Linux/macOS/WSL:
composer config --global cache-dir /d/composer-cache(注意:确保/d已挂载且可写) - Windows:
composer config --global cache-dir D:\composer-cache
别跳过下一步:这个目录必须手动创建,且当前用户有读写权限。Composer 从不自动建目录,也不提示错误。
验证缓存路径是否真生效,别信 composer config 的输出
composer config --global cache-dir 只显示你“写进去的值”,不代表运行时实际使用的位置。真正起作用的是 composer diag 输出里的 Cache directory: 行。
检查步骤要按顺序来:
- 先查环境变量:
echo $COMPOSER_CACHE_DIR(Linux/macOS)或$env:COMPOSER_CACHE_DIR(PowerShell),它优先级最高,会直接覆盖cache-dir配置 - 再运行
composer diag,确认Cache directory:指向你期望的路径 - 最后检查子目录是否存在:
ls -la $(composer config --global cache-dir)/files,首次composer install后这里应出现以哈希命名的 zip 包
如果 composer config --global cache-files-dir 输出为空,补上:composer config --global cache-files-dir "$(composer config --global cache-dir)/files",否则部分缓存可能被忽略。
离线场景下,靠缓存目录 + --no-install 组合预热依赖
纯离线环境不能联网下载包,但可以提前在有网机器上把所有依赖和元数据缓存好,再拷贝到目标机器。关键不是只拷 vendor/,而是整个缓存目录。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
操作流程:
- 在联网机器上执行一次完整安装:
composer install --no-dev(或加--optimize-autoloader) - 确认缓存已填充:
ls $(composer config --global cache-dir)/files | head -n 5应有多个 zip - 把整个
cache-dir目录打包,连同项目composer.lock一起复制到离线机器 - 离线机器上先配置好相同的
cache-dir路径,并确保目录存在、权限正确 - 运行:
composer install --no-install --ignore-platform-reqs——--no-install告诉 Composer 不下载、不解压,只校验缓存中是否有对应 zip;--ignore-platform-reqs避免因 PHP 版本等本地环境差异中断
若报 Package xxx not found in cache,说明该包没进缓存,需回联网机补装一次再同步。
CI/CD 流水线里临时换缓存路径,用环境变量最稳
在 GitLab CI、GitHub Actions 或 Jenkins 中,你不该改全局配置,因为可能影响其他 job。直接用 COMPOSER_CACHE_DIR 环境变量,进程级生效、无需重启、优先级最高。
示例(GitHub Actions):
- name: Set cache dir run: echo "COMPOSER_CACHE_DIR=/tmp/composer-cache" >> $GITHUB_ENV - name: Install dependencies run: composer install --no-dev --optimize-autoloader
注意两点:
- 路径必须是绝对路径,
/tmp/composer-cache这种没问题,./cache会失败 - 目录需提前创建并赋权:
mkdir -p /tmp/composer-cache && chmod 777 /tmp/composer-cache,尤其在容器内运行时,root 创建的目录对非 root 用户可能不可写
离线构建最常被忽略的点:缓存目录所有权。比如 CI 以 root 运行,但实际构建用户是 gitlab-runner,那就得 sudo chown -R gitlab-runner:gitlab-runner /tmp/composer-cache,否则 Composer 会静默退回到默认路径。

















