GitHub Actions 缓存为什么没生效?

闲人俊蓓 阅读 41

我在 GitHub Actions 里配置了缓存,但每次运行都重新安装依赖,感觉缓存根本没用上。

我用的是 Node.js 项目,缓存 key 是 node-modules-${{ hashFiles('package-lock.json') }},按理说 lock 文件没变就应该命中缓存才对。但日志里一直显示 Cache not found for input keys

这是我的 workflow 配置片段:

- name: Cache node modules
  uses: actions/cache@v3
  with:
    path: ~/.npm
    key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
    restore-keys: |
      ${{ runner.os }}-node-

是不是路径写错了?还是 key 的生成逻辑有问题?

我来解答 赞 6 收藏
二维码
手机扫码查看
1 条解答
技术迁迁
问题很明确,你的 path 写错了。

你缓存的是 ~/.npm,但这个是 npm 自己的缓存目录,不是项目里的 node_modules。npm install 安装的依赖是放在项目根目录的 node_modules 文件夹里,不是 ~/.npm

所以正确的配置应该是:

- name: Cache node modules
uses: actions/cache@v3
with:
path: node_modules
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-


把 path 改成 node_modules 就好了。

另外顺便提一嘴,restore-keys 里的 key 建议写成 ${{ runner.os }}-node-,这样当精确 key 没命中时,会自动找前缀匹配的缓存,多少能起点作用。
点赞
2026-03-17 22:00