composer多项目共享缓存是默认行为,无需额外配置;关键在于确保cache-files-dir指向files子目录、环境变量composer_cache_dir正确透传、php版本与镜像源一致以避免缓存失效。

Composer 多项目共享缓存是默认行为,不需要额外配置——只要不手动清空或破坏缓存路径,所有项目天然复用同一份 ~/.composer/cache(Linux/macOS)或 %APPDATA%\Composer\cache(Windows)。真正要解决的不是“怎么共享”,而是“为什么没共享”或“共享了但没生效”。
缓存没命中?先查 cache-files-dir 是否真正生效
很多人改了 cache-dir 却发现包还在重复下载,是因为 Composer 实际读取的是 cache-files-dir,它必须明确指向 files/ 子目录。只配 cache-dir 不等于启用缓存。
- 运行
composer config --global cache-files-dir:若输出为空,说明缓存文件层未启用 - 正确设置方式:
composer config --global cache-files-dir ~/.composer/cache/files - 验证是否写入成功:执行
composer clear-cache && composer install后,检查该路径下是否生成哈希命名的.zip文件 - Docker 或 CI 中,
php -r "echo getenv('COMPOSER_CACHE_DIR');"必须有输出,否则环境变量没透传
CI/CD 里多任务并发写缓存会冲突,必须按 PHP + Composer 版本隔离
GitHub Actions、GitLab CI 等共享构建机上,多个 job 共用一个缓存目录会导致元数据损坏或 dist 包校验失败——比如 PHP 8.2 下下载的 zip,在 PHP 8.3 的 autoloader 中可能因 opcache 或扩展差异无法加载。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 推荐缓存路径格式:
$HOME/.composer-cache-php8.2-composer2 - 在 CI 脚本中动态设置:
composer config --global cache-dir "$HOME/.composer-cache-$PHP_VERSION" - GitHub Actions 使用
actions/cache@v4时,key必须包含:hashFiles('**/composer.lock')-${{ runner.os }}-php${{ env.PHP_VERSION }}-composer${{ env.COMPOSER_VERSION }} - 镜像源 URL 也参与缓存 key 计算:本地用阿里云镜像,CI 用 packagist.org,缓存虽存在但会被跳过
composer install --download-only 是预热缓存最稳的方式
想让新机器或 CI 首次构建就走缓存,不能只靠 composer install 触发下载。因为一旦某包缺失,Composer 会直接报错中断,不会继续拉其他包。
-
composer install --download-only会尝试下载所有依赖并缓存,即使vendor/不存在或autoload错误也不退出 - 配合
--no-scripts可跳过 post-install-cmd(如 npm install),避免前端失败拖垮 PHP 缓存准备 - 适合放在 CI 的 “prepare cache” 阶段,和真正的 install 分开执行
- 注意:它不校验
composer.lock和composer.json是否匹配,仅确保 dist 包进缓存
最容易被忽略的是缓存路径和镜像源的绑定关系:改了私有仓库地址却没清旧缓存,或换了 PHP 小版本但缓存 key 没更新,结果缓存目录明明存在,却始终 0% 命中——它不是坏了,是 Composer 主动拒绝使用。










