迁移到 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.yml
见Yarn 配置文档例如registry
现在是npmRegistryServer
和network-timeout
是httpTimeout
.
迁移使用
至此,Yarn 3 的所有设置都已完成!剩下的工作就是根据 Yarn 的迁移指南例如,任何yarn install --frozen-lockfile
命令替换为yarn install --immutable
.
您还需要更新任何Dockerfile
的说明,以便将 Yarn 3 安装程序复制到镜像中:
COPY .yarn ./.yarn
COPY .yarnrc.yml ./
在多阶段Dockerfile
,每个阶段运行一个yarn
例如,在最后阶段,您可能需要添加以下内容:
COPY /app/.yarn ./.yarn
COPY /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>
.