通过缓存Composer依赖可显著提升GitHub Actions构建速度。首先使用actions/cache缓存~/.composer/cache和vendor/目录,结合composer.lock的hash值生成缓存key,确保依赖一致性;在工作流中先加载全局包缓存,再执行composer install --prefer-dist,并单独缓存vendor目录供后续阶段复用;建议始终提交composer.lock、避免跨PHP版本共享vendor缓存,多Job场景可结合upload-cache与download-cache实现高效协作,使依赖安装从数十秒缩短至几秒。

在GitHub Actions中高效运行Composer,关键在于利用缓存机制避免每次工作流都重新下载PHP依赖。通过缓存vendor目录和Composer本地包缓存,可以显著缩短构建时间。以下是如何配置一个高效的GitHub Actions工作流来实现这一点。
使用actions/cache缓存Composer依赖
GitHub官方提供了 actions/cache 动作,可用于缓存Composer的依赖目录。主要缓存两个路径:
-
~/.composer/cache:Composer下载的压缩包缓存 -
vendor/:项目依赖安装目录
缓存命中时,composer install 将直接使用已有依赖,无需重新下载,大幅提升速度。
配置工作流文件
在项目根目录创建或修改 .github/workflows/ci.yml 文件:
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.1'
tools: composer
cache: composer
- name: Cache Composer dependencies
uses: actions/cache@v3
with:
path: ~/.composer/cache/files
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
restore-keys: ${{ runner.os }}-composer-
- name: Install dependencies
run: composer install --no-progress --no-scripts --prefer-dist
- name: Cache vendor directory
uses: actions/cache@v3
with:
path: vendor
key: ${{ runner.os }}-vendor-${{ hashFiles('**/composer.lock') }}
说明:
-
setup-php动作自带PHP环境和Composer,并支持内置缓存(可选) - 第一个缓存步骤保存Composer全局包缓存
-
hashFiles('**/composer.lock')确保lock文件变更时缓存失效 - 先缓存全局包,再执行
composer install - 最后缓存
vendor目录,适用于后续作业复用(如部署阶段)
优化建议与注意事项
为获得最佳效果,请注意以下几点:
- 始终提交
composer.lock文件,确保依赖版本一致 - 使用
--prefer-dist优先从dist下载稳定包,加快安装 - 若项目较大,可考虑仅缓存
~/.composer/cache,让CI每次干净安装但快速获取包 - 避免缓存
vendor跨不同PHP版本或架构,可能导致兼容问题 - 多个Job需要共享依赖时,可配合
upload-cache和download-cache
基本上就这些。合理使用缓存能让GitHub Actions中的Composer安装从几十秒降至几秒,提升开发效率。不复杂但容易忽略细节。










