Skip to main content

迁移到 Yarn 3

虽然Backstage项目是用@backstage/create-app使用纱线 1默认情况下,可以将它们切换为使用纱线 3.工具yarn backstage-cli versions:bump仍然有效,因为它们可以识别两种锁文件格式。

迁移

除本指南外,还请务必查看纱线迁移指南也是如此。

忽略文件更新

首先,请确保您的应用程序中有更新的忽略项。 所有新建项目中都包含这些忽略项,但您的项目中可能缺少:

添加以下内容.gitignore:

# Yarn 3 files
.pnp.*
.yarn/*
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/sdks
!.yarn/versions

这对.dockerignore:

.yarn/cache
.yarn/install-state.gz

安装

下面我们开始实际安装。 我们建议将大部分步骤单独提交到 Git,以防万一需要回头调试。 要安装 Yarn 3,请在项目根目录下运行以下命令:

yarn set version stable

稍后我们将需要 Yarn 工作区工具插件,因此也要安装它:

yarn plugin import @yarnpkg/plugin-workspace-tools

现在,我们可以重新安装所有依赖项了。yarn.lock并将项目切换为使用node-modules作为 Yarn 节点链接器。

如果您有.yarnrc您现在可以删除它,但一定要将任何选项迁移到.yarnrc.ymlYarn 配置文档例如registry现在是npmRegistryServernetwork-timeouthttpTimeout.

迁移使用

至此,Yarn 3 的所有设置都已完成!剩下的工作就是根据 Yarn 的迁移指南例如,任何yarn install --frozen-lockfile命令替换为yarn install --immutable.

您还需要更新任何Dockerfile的说明,以便将 Yarn 3 安装程序复制到镜像中:

COPY .yarn ./.yarn
COPY .yarnrc.yml ./

在多阶段Dockerfile,每个阶段运行一个yarn例如,在最后阶段,您可能需要添加以下内容:

COPY --from=build --chown=node:node /app/.yarn ./.yarn
COPY --from=build --chown=node:node /app/.yarnrc.yml ./

--production标记为yarn install在 Yarn 3 中被移除,您需要使用yarn workspaces focus --all --production这样做的代价是yarn workspaces focus不支持--immutable旗子

RUN yarn workspaces focus --all --production && rm -rf "$(yarn cache clean)"

此外、yarn config已经从可以存储任意键值对调整为只支持少量预定义的键值对。 以前,我们会设置我们首选的python3口译员来解决与 Node-gyp 有关的任何问题因此,我们需要提供一个适当的替代品。

FROM node:16-bullseye-slim

# Set Python interpreter for `node-gyp` to use
ENV PYTHON /usr/bin/python3

# Install sqlite3 dependencies. You can skip this if you don't use sqlite3 in the image,
# in which case you should also move better-sqlite3 to "devDependencies" in package.json.
RUN apt-get update && \
apt-get install -y --no-install-recommends libsqlite3-dev python3 build-essential && \
rm -rf /var/lib/apt/lists/* && \
yarn config set python /usr/bin/python3
rm -rf /var/lib/apt/lists/*

您需要确保PYTHON环境变量的声明时间相对较早,早于任何Yarn作为node-gyp是由某些模块在安装过程中间接触发的。

如果您的项目中有任何内部 CLI 工具是通过"bin"条目package.json然后,您需要在项目根目录中将这些软件包添加为依赖包package.json这样做是为了确保 Yarn 能够获取可执行文件,并通过yarn <executable>.