如何在 Github Actions 上使用 Yarn 3.5 版本? (“错误:找不到模块.../yarn-3.5.0.cjs”)

问题描述 投票:0回答:4

在我们的本地计算机上,我们已经按照 Yarn 网站上的

说明为我们的节点版本 
16.17 安装了最新版本的 Yarn

corepack enable

corepack prepare yarn@stable --activate

我们发现这一步对于使其在本地也有效是必要的:

corepack prepare yarn@<version> --activate

我们使用 Github 操作来执行 lint 等操作并测试我们的代码。这是 lint.yml 文件:

name: Lint

on:
  # Trigger the workflow on push or pull request,
  # but only for the main branch
  push:
    branches:
      - main
  pull_request:
    branches:
      - main

jobs:
  run-linters:
    name: Run linters
    runs-on: ubuntu-latest

    steps:
      - name: Check out Git repository
        uses: actions/checkout@v3

      - name: Use Node.js
        uses: actions/setup-node@v3
        with:
          node-version: "16.17"

      - name: Install Node.js dependencies
        run: yarn install --immutable --immutable-cache --check-cache

      - name: Run eslint
        run: yarn eslint src/ --max-warnings=0

      - name: Run Prettier
        run: yarn prettier src/ --check

根据 Github Actions 文档,在此 CI 环境中应该安装yarn:

GitHub 托管的运行器安装了 npm 和 Yarn 依赖管理器。在构建和测试代码之前,您可以使用 npm 和 Yarn 在工作流程中安装依赖项。

但是我相信 Github actions 使用的 Yarn 版本是 1.something,因为它似乎是使用

yarn

(安装 Yarn 的旧方法)安装 
npm install -g yarn
 时安装的版本。

因此,当 Github actions 尝试使用

yarn

 时,我们会收到以下错误:

来自 github CI 的输出

node:internal/modules/cjs/loader:959 throw err; ^ Error: Cannot find module '/home/runner/work/ui/ui/.yarn/releases/yarn-3.5.0.cjs' at Function.Module._resolveFilename (node:internal/modules/cjs/loader:956:15) at Function.Module._load (node:internal/modules/cjs/loader:804:27) at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12) at node:internal/main/run_main_module:17:47 { code: 'MODULE_NOT_FOUND', requireStack: []
我尝试了网上推荐的各种方法来告诉 Github 使用哪个版本的节点和纱线。例如,我将 

packageManager

 属性添加到我们的 
package.json
:

package.json

... "packageManager": "[email protected]", ...
这不起作用,所以我将 

engines

 属性添加到 
package.json
:

package.json

... "engines": { "yarn": ">=3.5.0" }
错误依旧,所以我尝试直接在github actions 

.yml

文件中安装并激活最新版本的yarn:

lint.yml

name: Lint on: # Trigger the workflow on push or pull request, # but only for the main branch push: branches: - main pull_request: branches: - main jobs: run-linters: name: Run linters runs-on: ubuntu-latest steps: - name: Check out Git repository uses: actions/checkout@v3 - name: Use Node.js uses: actions/setup-node@v3 with: node-version: "16.17" - name: Install latest Yarn run: corepack prepare yarn@stable --activate - name: Activate latest Yarn run: yarn set version stable - name: Install Node.js dependencies run: yarn install --immutable --immutable-cache --check-cache - name: Run eslint run: yarn eslint src/ --max-warnings=0 - name: Run Prettier run: yarn prettier src/ --check
我不能完全确定这个错误是因为未能使用yarn v3.x,但这是我的怀疑,因为整个设置与我们的

yarn.lock

一起使用是yarn v1.x格式,并且我们都使用yarn v1 .x 本地。只是升级后,它无法在 github actions 上工作。

如何指示 Github Actions 的运行程序查找/使用最新版本的 Yarn?

附加信息

.yarnrc.yml

nodeLinker: node-modules yarnPath: .yarn/releases/yarn-3.5.0.cjs
    
continuous-integration github-actions yarnpkg yarn-v3
4个回答
2
投票
在我看来,你忽略了太多。这是 Yarn 文档推荐的设置:

https://yarnpkg.com/getting-started/qa#which-files-should-be-gitignored

当我忽略

.yarn/

 而不是 
.yarn/*
 并按照文档中的建议忽略该规则时,我遇到了类似的问题。


1
投票
这对我有帮助(不确定这是正确的方式)

yarn 默认添加在 gitignore .yarn (完整文件夹)中,

但我决定在

.gitignore 中添加 only .yarn/cache 文件夹,而不是完整的 .yarn。

现在我的 ci 正在工作。

gitignore in root of monorepo


1
投票
如果您有一个

.yarnrc.yml

 文件,其中包含 
yarnPath

例如

nodeLinker: node-modules yarnPath: .yarn/releases/yarn-3.6.0.cjs
确保文件存在,在本例中

.yarn/releases/yarn-3.6.0.cjs


您可以通过

yarn set version 3.6.0

生成,只需替换为您的文件期望的等效版本


0
投票
关键是在setup-node之前启用corepack:

... steps: - uses: actions/checkout@v4 - name: Enable Corepack run: corepack enable - name: Use Node.js 20.x uses: actions/setup-node@v4 with: node-version: '20.x' cache: 'yarn' ...
这也对我有帮助:

https://github.com/actions/setup-node/issues/480

© www.soinside.com 2019 - 2024. All rights reserved.