在 GitHub Actions 中缓存 node_modules

Posted

技术标签:

【中文标题】在 GitHub Actions 中缓存 node_modules【英文标题】:Cache node_modules in GitHub Actions 【发布时间】:2021-07-12 03:38:59 【问题描述】:

我有一个带有 2 个包的 Yarn monorepo(工作区):后端(Node.js/TypeScript)和前端(React/Typescript)。

/package.json(修剪)


  "workspaces": [
    "backend",
    "frontend"
  ],

我正在尝试添加与 GitHub Actions 的持续集成,并尝试使用 actions/cache@v2 缓存 Yarn 缓存目录和所有项目的 node_modules 目录

.github/workflows/CI.yml(修剪)

    steps:
      - uses: actions/checkout@v2

      - name: Get yarn cache directory path
        id: yarn-cache-dir-path
        run: |
          echo "::set-output name=dir::$(yarn cache dir)"
          echo "::set-output name=version::$(yarn -v)"

      - name: Use Node.js $ matrix.node-version 
        uses: actions/setup-node@v2
        with:
          node-version: $ matrix.node-version 

      - uses: actions/cache@v2
        with:
          path: |
            $ steps.yarn-cache-dir-path.outputs.dir 
            '**/node_modules'
            '**/.eslintcache'
          key: $ runner.os -yarn-$ steps.yarn-cache-dir-path.outputs.version -$ hashFiles('**/yarn.lock') 

      - name: Install packages
        run: yarn install --frozen-lockfile

我收到缓存已存储并重新用于连续运行:

key: Linux-yarn-1.22.10-143fef95c7228810cf502305eff3be1cbc468dc8a3e0b153a4311c0250aaef6f
Received 158645465 of 175422681 (90.4%), 151.3 MBs/sec
Received 175422681 of 175422681 (100.0%), 138.1 MBs/sec
Cache Size: ~167 MB (175422681 B)
/usr/bin/tar --use-compress-program zstd -d -xf /home/runner/work/_temp/08363700-9a23-447e-a80e-6f3dbec6068f/cache.tzst -P -C /home/runner/work/path
Cache restored successfully
Cache restored from key: Linux-yarn-1.22.10-143fef95c7228810cf502305eff3be1cbc468dc8a3e0b153a4311c0250aaef6f

yarn 仍然尝试解决依赖关系:

yarn install --frozen-lockfile
shell: /usr/bin/bash -e 0
yarn install v1.22.10
[1/4] Resolving packages...
[2/4] Fetching packages...
info fsevents@2.3.2: The platform "linux" is incompatible with this module.
info "fsevents@2.3.2" is an optional dependency and failed compatibility check. Excluding it from installation.
info fsevents@2.3.1: The platform "linux" is incompatible with this module.
info "fsevents@2.3.1" is an optional dependency and failed compatibility check. Excluding it from installation.
info fsevents@1.2.13: The platform "linux" is incompatible with this module.
info "fsevents@1.2.13" is an optional dependency and failed compatibility check. Excluding it from installation.
[3/4] Linking dependencies...
.....
[4/4] Building fresh packages...
Done in 40.07s.

我的期望是它应该像在我的本地机器上一样工作:

$ yarn --frozen-lockfile
yarn install v1.22.10
[1/4] ????  Resolving packages...
success Already up-to-date.
✨  Done in 0.72s.

我能否以某种方式改进我的配置以满足预期结果或预期的 GitHub Actions 行为?


更新:尝试以下路径时:

          path: |
            '**/node_modules'
            '**/.eslintcache'

或:

          path: |
            'node_modules'
            '*/node_modules'
            '**/.eslintcache'

缓存大小为 22 B。可能与 node_modules 目录中的任何一个都不匹配

【问题讨论】:

@jonrsharpe 感谢您的改进,但对于文件名,我已根据this post 格式化它们 这不是指导,只是格式化沙箱上的随机帖子。如果我们应该关注那些,一切可能看起来像meta.stackexchange.com/a/329360/248731! 【参考方案1】:

经过大量试验和错误,paths 中删除引号似乎已经解决了问题。而且缓存的大小几乎增加了两倍

  - uses: actions/cache@v2
    id: yarn-cache
    with:
      path: |
        **/node_modules
        **/.eslintcache
        $ steps.yarn-cache-dir-path.outputs.dir 

      key: $ runner.os -yarn-$ hashFiles('**/yarn.lock') 
      restore-keys: |
        $ runner.os -yarn-

Run actions/cache@v2

Received 213909504 of 305669200 (70.0%), 203.6 MBs/sec
Received 305669200 of 305669200 (100.0%), 185.6 MBs/sec
Cache Size: ~292 MB (305669200 B)
/usr/bin/tar --use-compress-program zstd -d -xf /home/runner/work/_temp/2e2d2a1d-04d7-44c3-829e-ec4e8faf394b/cache.tzst -P -C /home/runner/work/path
Cache restored successfully
Cache restored from key: Linux-yarn-143fef95c7228810cf502305eff3be1cbc468dc8a3e0b153a4311c0250aaef6f

Run yarn install --frozen-lockfile

yarn install v1.22.10
[1/4] Resolving packages...
success Already up-to-date.
Done in 0.96s.
permalink to workflow master version

【讨论】:

以上是关于在 GitHub Actions 中缓存 node_modules的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows 上的 GitHub Actions 中缓存依赖项

如何在 GitHub Actions 中缓存纱线包

在 GitHub Actions 工作流程中缓存 APT 包

如何在 Github Actions 中运行多个 Node 应用程序?

从版本列表中删除了 Node.js v15,但 Github Actions 仍将其显示在检查列表中

GitHub Actions:在 Windows 环境中缓存 Maven .m2 存储库 C\:\\Users\runneradmin\\.m2\repository:无法统计:没有这样的文件或目录