0

0

如何在GitHub Actions中配置Composer缓存以节省构建时间?

裘德小鎮的故事

裘德小鎮的故事

发布时间:2026-01-12 16:33:10

|

376人浏览过

|

来源于php中文网

原创

默认 actions/cache 对 Composer 缓存易失效,因 Composer 缓存键隐式依赖 PHP 版本、platform 配置等,而 actions/cache 仅按指定 key 判断;正确做法是固定 PHP minor 版本、用 hashFiles('**/composer.lock') 作 key、缓存 ~/.composer/cache 并加 --no-interaction --prefer-dist --optimize-autoloader。

如何在github actions中配置composer缓存以节省构建时间?

为什么默认的 actions/cache 对 Composer 缓存容易失效?

直接用 composer install 前缓存 ~/.composer/cache 目录看似合理,但实际 CI 中常命中失败。根本原因是:Composer 的缓存键不仅依赖 composer.lock 内容,还隐式受 PHP 版本、平台配置(如 platform-check)、插件行为影响。GitHub Actions 的 actions/cache 默认只按你提供的 key 判断,一旦 PHP minor 版本升级(如 8.2.10 → 8.2.12)或 composer.jsonconfig.platform.php 变更,缓存就不可复用,却仍被“成功恢复”——导致后续 install 重装全部包,白费时间。

正确做法:用 composer install --no-interaction --prefer-dist --optimize-autoloader + 锁文件哈希作缓存 key

必须把缓存 key 绑定到真正决定依赖树的内容上:即 composer.lock 的内容哈希,且确保 PHP 环境稳定。推荐组合:

  • 固定 PHP minor 版本(如 php-version: '8.2'),避免 patch 升级触发缓存失效
  • hashFiles('**/composer.lock') 生成 key,比单纯用 composer.lock 时间戳更可靠
  • 缓存目录设为 ~/.composer/cache,这是 Composer 默认查找路径
  • 务必加 --no-interaction --prefer-dist --optimize-autoloader,否则缓存可能被跳过或降级为源码安装
steps:
  - uses: actions/checkout@v4
  - name: Setup PHP
    uses: shivammathur/setup-php@v2
    with:
      php-version: '8.2'
      tools: composer
  - name: Cache Composer dependencies
    uses: actions/cache@v4
    with:
      path: ~/.composer/cache
      key: ${{ runner.os }}-php-${{ matrix.php-version }}-composer-${{ hashFiles('**/composer.lock') }}
  - name: Install dependencies
    run: composer install --no-interaction --prefer-dist --optimize-autoloader

遇到 Cache not found for input keys 还是慢?检查三个硬性条件

这个提示不等于失败,但若每次都是“not found”,说明缓存从未写入或 key 不一致。常见原因:

ClipDrop Relight
ClipDrop Relight

ClipDrop推出的AI图片图像打光工具

下载
  • composer.lock 文件未提交到仓库——CI 拉取的是空锁文件,哈希永远是空字符串
  • workflow 中用了 strategy.matrix 但 key 里漏了 matrix.php-version,导致不同 PHP 版本共用一个缓存路径,互相污染
  • 本地开发时执行了 composer update 但没提交新 composer.lock,CI 用旧 lock 哈希查缓存,而上次缓存是用新 lock 写的,自然找不到

进阶:多项目共享缓存(如 monorepo)需额外处理 vendor/

如果项目结构含多个子目录各自有 composer.json(如 packages/foo/composer.json),不能只靠全局 ~/.composer/cache。此时应:

  • 为每个子目录单独设置 cache step,key 包含子路径和对应 lock 文件哈希
  • 避免在 root 执行 composer install,改用 cd packages/foo && composer install
  • 慎用 composer install --global,它会绕过项目级缓存逻辑,且权限易出错

最麻烦的其实是 lock 文件变更频率——只要它一动,整个缓存就失效。所以别为了“省几秒”频繁 update,稳住 lock 才是提速核心。

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2431

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

1556

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

1454

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

951

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

1414

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

1234

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1445

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1305

2023.11.13

Java 项目构建与依赖管理(Maven / Gradle)
Java 项目构建与依赖管理(Maven / Gradle)

本专题系统讲解 Java 项目构建与依赖管理的完整体系,重点覆盖 Maven 与 Gradle 的核心概念、项目生命周期、依赖冲突解决、多模块项目管理、构建加速与版本发布规范。通过真实项目结构示例,帮助学习者掌握 从零搭建、维护到发布 Java 工程的标准化流程,提升在实际团队开发中的工程能力与协作效率。

9

2026.01.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 8.5万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 6.9万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号