参考了这篇文章:在GitHub Action 优化Node.js App 的环境建置
文中给出的最优解:
一开始使用npm ci
代替npm install
,但发现npm ci
永远都会先把node_modules 删掉再安装一遍packages
所以如果我们把node_modules
缓存起来,并且确认package-lock.json
和node version 等因素都没有改变时,就不必重新跑一遍npm ci
了
- name: Cache Node Modules
uses: actions/cache@v2
with:
path: node_modules
key: node-modules-${{ runner.os }}-${{ matrix.node-version }}-${{ hashFiles('package-lock.json') }}
- name: Install Packages
run: test -d node_modules && echo "node_modules exists" || npm ci
然而不知道是什么原因,尽管package-lock.json
没有变化,我每次push代码后,都会执行npm ci
,达不到使用缓存的作用。经过多次尝试后,更改了一下代码:
# 根据 key 判断是否命中 node_modules
- name: Cache Node Modules
id: cache-node-modules
uses: actions/cache@v2
with:
path: node_modules
key: node-modules-${{ runner.os }}-${{ matrix.node-version }}-${{ hashFiles('package-lock.json') }}
# true代表缓存命中,node_modules没有变化,而''代表没有命中,node_modules发生变化
- name: Debug Cache Hit
run: echo "${{ steps.cache-node-modules.outputs.cache-hit }}"
# 只有结果是''时才执行
- name: Install Packages
if: steps.cache-node-modules.outputs.cache-hit == ''
run: npm ci
若有异议,欢迎批评指正!
参考文章:
-
GitHub Actions 实现自动部署静态博客 — 使用步骤
-
如何使用Github的Action实现博客的自动部署 — 踩坑启示
-
在 GitHub Action 優化 Node.js App 的環境建置 — 优化npm install