Next.js在GitHub Actions中缓存失效问题求助
问题排查与解决方案
核心问题分析
从你的配置和日志来看,缓存未被识别主要有三个原因:
步骤顺序错误
你先执行了缓存恢复,再拉取代码。actions/checkout会清空并覆盖${github.workspace}目录,导致之前恢复的.next/cache被删除,Next.js自然找不到构建缓存。npm ci --force强制跳过缓存--force参数会强制npm重新安装所有依赖,完全忽略本地缓存,哪怕~/.npm缓存已恢复,也会重新下载607个包。缓存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
相关产品推荐
相关产品推荐

