如何在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中间件编写与应用流程

