iRo*_*tia 10 caching github npm yarnpkg github-actions
我想缓存 npm 依赖项,这样我就不会在每次推送时都执行 npm install ,而是从缓存中加载它。
我认为 github 操作现在支持这个?:如何在 GitHub 操作中缓存步骤?
这里有几个案例
package.json更改,这意味着yarn.lock或package-lock.json更改了 npm install 和 update cacheyarn install和npm install从上述相同的问题,我将我的 github 操作更改为这样的
name: Tsc compilation test
on: [push, pull_request]
jobs:
build:
name: Build
runs-on: ubuntu-18.04
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Cache NPM dependencies
uses: actions/cache@v1
with:
path: ~/.npm
key: ${{ runner.OS }}-npm-cache-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.OS }}-npm-cache-
- name: Install dependencies
run: npm install
- name: Test tsc
run: npm run ts-compile-check
Run Code Online (Sandbox Code Playgroud)
这仍然npm install没有减少我安装依赖项的计算时间(所以我不确定这是否正常工作)
然后我确实yarn install axios希望它会更新我的缓存,但在安装后我看到这已记录
Post job cleanup.
Cache hit occurred on the primary key Linux-npm-cache-, not saving cache.
Run Code Online (Sandbox Code Playgroud)
所以这是我的问题,是否有可能实现
package.json更改,这意味着yarn.lock或package-lock.json更改,请执行npm install并更新缓存yarn install和npm install有人可以向我解释这个吗
with:
path: ~/.npm
key: ${{ runner.OS }}-npm-cache-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.OS }}-npm-cache-
Run Code Online (Sandbox Code Playgroud)
为了对 GitHub 操作进行有效的缓存,需要有一个package-lock.jsonoryarn.lock存在。这个文件是在安装包时自动生成的。如果您想了解有关 package-lock.json 的更多信息,请查看文档。
现在有一个问题,是否应该在同一个项目中使用 npm 和 yarn。有关该主题的更多信息,请点击此处。
基于这个问题,我们假设 package-lock.json 和 yarn.lock 都存在。如果您只使用两者之一,请随时从下面删除一个。下面的配置适用于用于yarn config get cacheFolder获取缓存文件夹的纱线版本 2 。对于另一个纱线版本,请参阅文档。
name: Tsc compilation test
on: [push, pull_request]
jobs:
build:
name: Build
runs-on: ubuntu-18.04
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Get yarn cache directory path
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn config get cacheFolder)"
- name: Cache yarn dependencies
uses: actions/cache@v2
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
- name: Cache npm dependencies
uses: actions/cache@v2
with:
path: '~/.npm'
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-
- name: Install dependencies
run: npm install # or yarn install
- name: Test tsc
run: npm run ts-compile-check
Run Code Online (Sandbox Code Playgroud)
就是这样!好吧,除了一件事。上面我们~/.npm用于缓存 npm 依赖项。在性能方面,缓存会更快,**/node_modules但在某些情况下这会引入冲突。随意尝试看看哪一个适合你。更多关于这里和这里的信息。
从您的问题中,您还要求解释以下代码:
with:
path: ~/.npm
key: ${{ runner.OS }}-npm-cache-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.OS }}-npm-cache-
Run Code Online (Sandbox Code Playgroud)
https://github.com/actions/cache#usage:
path - 要缓存和恢复的文件、目录和通配符模式的列表。有关支持的模式,请参阅 @actions/glob。
key - 用于恢复和保存缓存的显式键
restore-keys - 如果键没有发生缓存命中,则用于恢复缓存的有序键列表
因此上面的代码:
path 是将被缓存/恢复的文件夹(安装依赖项的位置)key是将被缓存的路径的唯一标识符。在这种情况下,它使用 .hash 散列任何**/package-lock.json文件的内容hashFiles。基本上,当 package-lock.json 文件发生变化时,这意味着依赖项发生了变化,不应使用缓存。restore-keys 基本上是默认键,以防万一 key| 归档时间: |
|
| 查看次数: |
2688 次 |
| 最近记录: |