cache-files-dir 必须显式配置为含 files 的绝对路径,仅设 cache-dir 无效;composer_cache_dir 环境变量优先级最高且不解析占位符;多项目共享缓存需确保 php 小版本、镜像源和 composer.lock content-hash 一致;vcs/ 目录需手动清理或禁用以节省空间。

cache-files-dir 必须显式配置为含 files 的绝对路径
只设 cache-dir 不起作用——它只是父目录,Composer 实际下载的 ZIP 包和解压后的 dist 文件全存在 cache-files-dir 下。这个值必须明确指向一个以 files 结尾的子目录,比如 ~/.composer/cache/files(Linux/macOS)或 %APPDATA%\Composer\Cache\files(Windows)。运行 composer config --global cache-files-dir 输出为空,说明没配,缓存会 fallback 到默认位置,根本不会被多项目复用。
COMPOSER_CACHE_DIR 环境变量优先级最高,且不能带占位符
一旦设置了 COMPOSER_CACHE_DIR,所有 config 配置都会被跳过。它必须是绝对路径,~、$HOME、%APPDATA% 全部不解析。在 Docker 或 CI/CD 中最容易踩坑:环境变量存在但路径写成 /cache(没挂载)、或写成 ./composer-cache(相对路径),结果缓存写到容器临时文件系统里,下次构建就丢。
验证是否生效:php -r "echo getenv('COMPOSER_CACHE_DIR');" 输出应为非空且合法的绝对路径。
多项目共享缓存 ≠ 自动命中,PHP 版本和镜像源必须一致
即使路径对了、ZIP 文件也真实存在,Composer 仍可能拒绝复用——因为校验失败。关键约束有三个:
-
PHP版本不同(如 8.1 和 8.2 项目共用同一缓存目录,dist 包可能因扩展差异被跳过) -
composer.lock中的content-hash与当前composer.json不匹配 - 镜像源不一致(一个走 packagist.org,一个走阿里云镜像,元数据哈希不同)
所以共享缓存不是配完路径就一劳永逸,得确保团队内 PHP 小版本统一、repositories 配置一致、且定期跑 composer update --lock 同步 lock 文件。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
清理 vcs/ 目录才能真正释放空间
composer clear-cache 默认不删 vcs/,但它常占几百 MB。这个目录存的是 Git 裸仓库,是磁盘和 inode 杀手。共享缓存若长期不维护,vcs/ 会越积越多。
手动清它:rm -rf $(composer config --global cache-dir)/vcs/*(注意结尾的 /*,避免误删父目录)
更彻底的方案是禁用 VCS 缓存:composer config --global cache-vcs false,后续全部走 ZIP 包安装,既提速又省空间,适合离线或 CI 场景。
真正难的不是设路径,而是让多个项目在不同时间、不同 PHP 版本、不同网络策略下,始终满足那三个一致性条件。缓存目录只是容器,内容是否可信,得靠人盯住 lock 文件、PHP 小版本和镜像源这三样东西。










