Travis Ci 出现 eval yarn --frozen-lockfile 报错?

新手上路,请多包涵

在使用 Travis Ci 构建 Hexo 时出现了构件失败的情况,报错信息为 :

error Your lockfile needs to be updated, but yarn was run with `--frozen-lockfile`.
info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.

The command "eval yarn --frozen-lockfile " failed. Retrying, 2 of 3.
阅读 865
avatarAI BotBETA

这个问题与 Travis CI 构建过程中的 Yarn 依赖管理相关。报错信息表明,Yarn 的 lockfile 需要更新,但你使用了 --frozen-lockfile 参数来运行 Yarn,这意味着 Yarn 将不会更改 lockfile。

在 Travis CI 中,你通常希望确保所有构建都在相同的依赖项版本上运行,以确保构建的一致性。为此,你可能会使用 --frozen-lockfile 参数来防止 Yarn 在构建过程中更新 lockfile。然而,这个报错表明,在之前的某个时刻,lockfile 已经被修改,这可能是因为有人更新了项目的依赖项但没有更新 lockfile。

为了解决这个问题,你可以采取以下步骤:

  1. 更新 lockfile:在你的本地环境中,运行 yarn install(不使用 --frozen-lockfile 参数)来更新 lockfile。然后,将更新后的 lockfile 提交到版本控制系统中。
  2. 在 Travis CI 中重试构建:提交更新后的 lockfile 后,重新触发 Travis CI 构建。由于 lockfile 已经更新,并且与你的代码库中的其他文件保持一致,这次构建应该能够成功。

如果你不希望在你的构建过程中自动更新 lockfile,你可以在 .travis.yml 文件中设置一个条件,只在检测到 lockfile 有更改时才运行 yarn install(不使用 --frozen-lockfile 参数)。

例如:

script:
  - if [ -n "$(git diff --name-only $TRAVIS_COMMIT_RANGE -- 'yarn.lock')" ]; then yarn install; fi
  - yarn --frozen-lockfile

在这个示例中,git diff 命令用于检查 yarn.lock 文件是否在提交范围内有更改。如果有更改,它会先运行 yarn install 来更新 lockfile,然后再运行 yarn --frozen-lockfile。如果 yarn.lock 文件没有更改,它只会运行 yarn --frozen-lockfile

请注意,这些步骤假设你已经正确配置了 Travis CI 和 Yarn,并且你的项目中已经包含了 yarn.lock 文件。如果你还没有这样做,你可能需要先设置这些基础配置。

1 个回答
✓ 已被采纳

Travis Ci 构建 Nodejs 项目的时候,默认使用了 yarn 作为 npm 的替换安装方式。但是在 2020 年 2 月份之前,默认的安装指令为:

$ yarn

但是之后 Travis Ci 修改了默认的安装指令,将其更改为:

$ yarn --frozen-lockfile

yarn --frozen-lockfileyarn指令的区别在于:前者锁定当前依赖包的版本号,其进行的操作就是按照 yarn-lock.json 去安装。但是当一个依赖包拥有新版本时,yarn 为了防止开发者一直使用老旧版本的依赖,就会报出警告,就像我们遇到的问题那样。

我们可以修改 .travis.yml 安装部分的脚本,来取消使用 --frozen-lockfile 指令:

install:
  - yarn

同时需要保证node_js再10.0版本以上!

node_js:
  - "10"
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进