GitHub Actions的Cache缓存为什么总是显示“Not found”?
我在项目里配置了GitHub Actions的npm缓存,但每次构建时都提示Cache not found for input keys,明明之前成功过几次啊?
场景是这样的:前端Vue项目用npm,按照官方文档设置了缓存:
# workflow步骤片段
- name: Cache npm dependencies
uses: actions/cache@v3
with:
path: node_modules
key: ${{ runner.os }}-npm-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-npm-
昨天修改了package.json里的一个开发依赖,提交后缓存突然失效了。我试过手动清理缓存,也确认路径没错,但新构建还是每次都重新install依赖,这不挺浪费时间的嘛…
key的变化导致缓存匹配不上。你看,你用的是${{ hashFiles('**/package-lock.json') }}来生成key,而昨天修改了package.json里的依赖,这会直接导致package-lock.json发生变化,从而生成一个新的key。新key和之前的缓存key对不上,自然就显示“Not found”了。标准写法其实你已经用了,但可以稍微调整一下策略。比如在
restore-keys里多加一层容错:这样做的意思是,如果精确的
key找不到,就会尝试用更宽泛的restore-keys去匹配之前的缓存。虽然可能不是完全匹配的依赖,但至少能减少重复安装的时间。另外,提醒一下,如果你经常修改依赖,可以考虑把
package-lock.json的hash改为package.json的hash,这样影响范围会小一点。不过这要看你的项目具体情况了。最后,别忘了GitHub Actions的缓存是有生命周期的(默认14天),如果长时间没跑构建,缓存也可能被清理掉。这点文档里是有提到的,但很容易忽略...