GitHub Actions 缓存没生效,为什么每次都要重新安装依赖?
我在用 GitHub Actions 做 CI,想缓存 node_modules 提升速度,但每次跑 workflow 都重新装依赖,感觉缓存根本没命中。我明明用了 cache key 包含 package-lock.json 的 hash 啊。
这是我的 workflow 里 cache 步骤的配置:
- name: Cache node modules
uses: actions/cache@v3
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-
是不是路径写错了?还是 restore-keys 的写法有问题?
~/.npm可能不太对劲。Node.js 项目通常会用node_modules而不是~/.npm来存储依赖包。你可以试试改成这样:
这样应该能更好地匹配到你的项目结构。另外,确保你的
package-lock.json文件在每次构建之前都没有变化,否则缓存 key 也会变化,导致无法命中缓存。希望这能解决问题,不然只能一步一步调试了。CSS的话,有时候问题出在最不起眼的地方,前端开发就是这样的,对吧?
首先检查一下路径是否正确。你设置的缓存路径是
~/.npm,这在 Linux 和 macOS 上是正确的,但在 Windows 上可能是~AppDatanpm-cache。确保你的 workflow 在不同的操作系统上都能正确找到缓存路径。其次,restore-keys 的写法没问题,它会在找不到精确匹配的 key 时尝试使用这些模糊匹配的 key。不过,如果你的 package-lock.json 没有变化,理论上应该能够命中精确的 key。
你可以在 workflow 中添加一些调试信息,输出缓存的 key 和恢复的 key,确认它们是否匹配。比如可以在 cache 步骤后加一个 step 输出相关信息:
pre class="pure-highlightjs line-numbers">
- name: Debug Cache Keys
run: echo "Cache Key: ${{ steps.cache-node-modules.outputs.cache-primary-key }}"
echo "Restore Keys: ${{ steps.cache-node-modules.outputs.cache-restore-keys }}"
这样可以确保你看到的是什么,从而判断为什么缓存没有命中。
最后,检查一下是否有其他步骤清理了缓存目录或者修改了 package-lock.json,导致缓存失效。
希望这些建议能帮到你,如果问题依旧存在,可以提供更多日志信息方便进一步排查。