在我们的本地计算机上,我们已经按照 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
.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
生成,只需替换为您的文件期望的等效版本