ci 中 composer install 慢的根本原因是每次构建都重新下载解压依赖并生成自动加载文件,必须同时缓存 vendor 目录和 composer_cache_dir,并使用 –no-interaction –prefer-dist –optimize-autoloader 参数。
CI 中 composer install 为什么慢
根本原因是每次构建都重新下载全部依赖包,尤其是 vendor/ 目录重建 + ZIP 包解压 + 自动加载文件生成,叠加网络波动和 Packagist 响应延迟,单次耗时常超 2 分钟。缓存不是“可选优化”,而是 CI 稳定性的刚需。
必须启用的两个缓存层:vendor 和 Composer 自身 cache-dir
只缓存 vendor/ 不够——Composer 在安装前会先从 cache-dir 解包 ZIP、校验哈希、写临时文件;若 cache-dir 每次清空,仍要重复下载和解压。正确做法是同时持久化:
-
vendor/目录(注意:需排除vendor/bin/符号链接和部分生成文件) -
COMPOSER_CACHE_DIR对应路径(默认~/.composer/cache),它存的是已下载的 ZIP 和 dist 包元数据
GitHub Actions 示例配置片段:
steps:
- name: Cache Composer dependencies
uses: actions/cache@v4
with:
path: |
vendor
~/.composer/cache
key: ${{ runner.os }}-php-${{ hashFiles('**/composer.lock') }}-${{ hashFiles('**/composer.json') }}
composer install 必须加 –no-interaction –prefer-dist –optimize-autoloader
这三个参数缺一不可: