通过缓存 Composer 依赖可显著加速 GitHub Actions 构建。基于 composer.lock 文件哈希值生成缓存键,使用 actions/cache 缓存 ~/.composer/cache 目录,命中缓存后执行 composer install --prefer-dist --no-progress,使安装时间从几十秒降至几秒,特别适用于频繁运行的 CI/CD 任务。

在使用 GitHub Actions 构建 PHP 项目时,每次运行都会执行 composer install 来安装依赖,这会显著增加构建时间。通过缓存 Composer 的依赖包,可以大幅减少重复下载和安装的时间,从而加速 CI/CD 流程。
缓存原理与关键点
GitHub Actions 提供了 actions/cache 动作,可以将 Composer 的全局 vendor 目录(即下载的依赖包)缓存起来。当下次构建时,若 composer.lock 文件未变,则直接复用缓存,跳过远程拉取过程。
核心思路是:
- 基于
composer.lock文件的哈希值生成缓存键(cache key) - 缓存路径为 Composer 的全局缓存目录(通常是
~/.composer/cache) - 恢复缓存后执行
composer install --prefer-dist --no-progress
配置工作流文件
在你的 GitHub Actions 工作流中(如 .github/workflows/ci.yml),添加缓存步骤:
jobs:
build:
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
- name: Cache Composer dependencies
uses: actions/cache@v3
with:
path: ~/.composer/cache
key: ${{ runner.os }}-php-${{ hashFiles('**/composer.lock') }}
restore-keys: |
${{ runner.os }}-php-
- name: Install dependencies
run: composer install --prefer-dist --no-progress说明与优化建议
path 指定的是 Composer 存放下载包的本地缓存目录,不同系统位置一致。
key 使用 composer.lock 的哈希值,确保依赖变动时缓存失效。若 lock 文件相同,则命中缓存。
restore-keys 提供模糊匹配回退机制。例如当 lock 文件有微小变更时,仍可尝试使用旧缓存加速部分下载。
额外建议:
- 确保项目中存在
composer.lock文件并提交到 Git - 使用
--prefer-dist优先从 dist 包安装,更快更稳定 - 可在不同 job 或环境中复用缓存,提升整体流水线效率
基本上就这些。合理利用缓存能将依赖安装时间从几十秒降至几秒,特别适合频繁运行的 CI 任务。










