手动执行JS文件调用@actions/cache时缓存存取失败求助
问题原因与解决办法
这个报错的核心原因是:@actions/cache 包是专门为 GitHub Actions 运行环境设计的,它依赖 GitHub Actions 自动注入的环境变量(比如 ACTIONS_CACHE_URL、ACTIONS_RUNTIME_TOKEN)来连接 GitHub 的缓存服务。你手动执行脚本时,这些环境变量不存在,自然找不到缓存服务地址。
解决步骤:
直接在 GitHub Actions 工作流中运行脚本
这是最合理的做法,把你的脚本整合到 GitHub Actions 的 workflow 文件(比如.github/workflows/build.yml)里,示例如下:name: Build with Cache on: [push] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: 20 - name: Run cache script run: node your-cache-script.js # 这里会自动注入所需的环境变量,@actions/cache 就能正常工作修正脚本里的笔误
你的代码里最后一行用了prodHash,但前面定义的是key,这会导致保存缓存时出错,应该改成:await saveCache(cachePathes, key);如果非要在本地测试缓存逻辑
放弃使用@actions/cache,换成本地缓存方案,比如用node-cache或者自己读写文件实现:// 示例:本地文件缓存 import fs from 'fs/promises'; import path from 'path'; import { execSync } from 'child_process'; const cacheDir = './.local-cache'; const cachePathes = ['dist']; async function checkLocalCache(key) { const cacheKeyPath = path.join(cacheDir, key); try { await fs.access(cacheKeyPath); // 缓存存在,复制缓存文件到目标目录 await fs.cp(path.join(cacheDir, 'dist'), './dist', { recursive: true }); return true; } catch { return false; } } async function saveLocalCache(key) { await fs.mkdir(cacheDir, { recursive: true }); await fs.cp('./dist', path.join(cacheDir, 'dist'), { recursive: true }); await fs.writeFile(path.join(cacheDir, key), new Date().toISOString()); } const key = getHashKey(); const hasCache = await checkLocalCache(key); if (!hasCache) { execSync('npm run build'); await saveLocalCache(key); }
内容的提问来源于stack exchange,提问作者Robert
相关产品推荐
相关产品推荐

