如何在GitHub Actions中缓存composer依赖来加速构建

发布时间 - 2025-10-06 00:00:00    点击率:
通过缓存 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 任务。


# php  # git  # composer  # github  # ubuntu  # 工作流  # 降至  # 几秒  # 复用  # 的是  # 适用于  # 可在  # 更快  # 能将  # 这会 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】  Laravel怎么发送邮件_Laravel Mail类SMTP配置教程  Laravel怎么实现支付功能_Laravel集成支付宝微信支付  html5audio标签播放结束怎么触发事件_onended回调方法【教程】  手机软键盘弹出时影响布局的解决方法  重庆市网站制作公司,重庆招聘网站哪个好?  非常酷的网站设计制作软件,酷培ai教育官方网站?  Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】  Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层  laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法  浅谈redis在项目中的应用  如何快速生成ASP一键建站模板并优化安全性?  详解Android图表 MPAndroidChart折线图  网站页面设计需要考虑到这些问题  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  实例解析angularjs的filter过滤器  ChatGPT 4.0官网入口地址 ChatGPT在线体验官网  今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】  laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法  javascript中的数组方法有哪些_如何利用数组方法简化数据处理  如何确保FTP站点访问权限与数据传输安全?  javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】  html5的keygen标签为什么废弃_替代方案说明【解答】  实例解析Array和String方法  php485函数参数是什么意思_php485各参数详细说明【介绍】  高防服务器租用如何选择配置与防御等级?  微信推文制作网站有哪些,怎么做微信推文,急?  开心动漫网站制作软件下载,十分开心动画为何停播?  网站制作软件有哪些,制图软件有哪些?  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  Windows Hello人脸识别突然无法使用  linux top下的 minerd 木马清除方法  UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】  谷歌Google入口永久地址_Google搜索引擎官网首页永久入口  Swift中swift中的switch 语句  如何自定义建站之星模板颜色并下载新样式?  Laravel如何实现API速率限制?(Rate Limiting教程)  电商网站制作价格怎么算,网上拍卖流程以及规则?  微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】  如何在万网利用已有域名快速建站?  Laravel如何构建RESTful API_Laravel标准化API接口开发指南  如何注册花生壳免费域名并搭建个人网站?  如何快速搭建安全的FTP站点?  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置  高端建站如何打造兼具美学与转化的品牌官网?  三星、SK海力士获美批准:可向中国出口芯片制造设备  Android中AutoCompleteTextView自动提示  Laravel如何创建和注册中间件_Laravel中间件编写与应用流程