这个问题与 Travis CI 构建过程中的 Yarn 依赖管理相关。报错信息表明,Yarn 的 lockfile 需要更新,但你使用了 --frozen-lockfile
参数来运行 Yarn,这意味着 Yarn 将不会更改 lockfile。
在 Travis CI 中,你通常希望确保所有构建都在相同的依赖项版本上运行,以确保构建的一致性。为此,你可能会使用 --frozen-lockfile
参数来防止 Yarn 在构建过程中更新 lockfile。然而,这个报错表明,在之前的某个时刻,lockfile 已经被修改,这可能是因为有人更新了项目的依赖项但没有更新 lockfile。
为了解决这个问题,你可以采取以下步骤:
- 更新 lockfile:在你的本地环境中,运行
yarn install
(不使用 --frozen-lockfile
参数)来更新 lockfile。然后,将更新后的 lockfile 提交到版本控制系统中。 - 在 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
文件。如果你还没有这样做,你可能需要先设置这些基础配置。
Travis Ci 构建 Nodejs 项目的时候,默认使用了 yarn 作为 npm 的替换安装方式。但是在 2020 年 2 月份之前,默认的安装指令为:
但是之后 Travis Ci 修改了默认的安装指令,将其更改为:
yarn --frozen-lockfile
与yarn
指令的区别在于:前者锁定当前依赖包的版本号,其进行的操作就是按照 yarn-lock.json 去安装。但是当一个依赖包拥有新版本时,yarn 为了防止开发者一直使用老旧版本的依赖,就会报出警告,就像我们遇到的问题那样。我们可以修改 .travis.yml 安装部分的脚本,来取消使用 --frozen-lockfile 指令:
同时需要保证node_js再10.0版本以上!