You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js在GitHub Actions中缓存失效问题求助

问题排查与解决方案

核心问题分析

从你的配置和日志来看,缓存未被识别主要有三个原因:

  1. 步骤顺序错误
    你先执行了缓存恢复,再拉取代码。actions/checkout会清空并覆盖${github.workspace}目录,导致之前恢复的.next/cache被删除,Next.js自然找不到构建缓存。

  2. npm ci --force强制跳过缓存
    --force参数会强制npm重新安装所有依赖,完全忽略本地缓存,哪怕~/.npm缓存已恢复,也会重新下载607个包。

  3. 缓存Key匹配失效
    日志显示缓存Key为Linux-nextjs--,末尾的空值说明hashFiles('**.[jt]s', '**.[jt]sx')未匹配到任何文件。原匹配规则**.[jt]s仅能匹配根目录下的.js/.ts文件,子目录的文件需要通配符*。

修复后的完整配置

修改firebase-hosting-merge.yml如下:

name: Deploy to Firebase Hosting on merge
"on":
  push:
    branches:
      - main
jobs:
  build_and_deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@main
      - uses: actions/cache@v3
        with:
          path: |
            ~/.npm
            ${{ github.workspace }}/.next/cache
          key: ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-${{ hashFiles('**/*.js', '**/*.jsx', '**/*.ts', '**/*.tsx') }}
          restore-keys: |
            ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-
      - run: npm ci && npx next build && npx next export
      - uses: FirebaseExtended/action-hosting-deploy@v0
        with:
          repoToken: "${{ secrets.GITHUB_TOKEN }}"
          firebaseServiceAccount: "${{ secrets.MY SERVICE ACCOUNT }}"
          channelId: live
          projectId: MY PROJECT ID

关键修改点说明

  • 调整步骤顺序:先执行actions/checkout拉取代码,再恢复缓存,确保.next/cache能保留在正确的工作目录中。
  • 移除--force参数:使用npm ci而非npm ci --force,让npm正常读取~/.npm缓存,避免重复下载依赖。
  • 修正文件匹配规则:将**.[jt]s改为**/*.js、**/*.ts等格式,确保能匹配到所有子目录下的源码文件,生成有效的缓存Key。

内容的提问来源于stack exchange,提问作者Pexate

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 18:24:29