使用 Yarn 4.0 && 从 Yarn 1.22 升级为 Yarn 4.0

问题背景

yarn 1.22 版本包括 1.x 的版本,被称为 Classic Yarn。
也就是经典 Yarn。但是这个版本的yarn 从 2020 年 1 月就不再更新了。而最新版本的 yarn 已经更新到 4.0 了,有着更有好的用户界面和修复更多的问题,并且配置项的分类更加清晰,使用 yaml 格式的配置文件来代替以往的 yarnrc 文件。

Corepack 包介绍

Corepack 是 nodejs 团队和 yarn, pnpm 等第三方依赖管理工具团队一起开发的,用于方便 nodejs
切换 yarn, pnpm 等各种依赖管理工具。

Corepack 从 nodejs 的 v16.9.0, v14.19.0 版本引入,并默认集成在之后的 nodejs 版本中。
但是目前为止依旧是实验性功能。

这里我默认安装 nodejs v18.20.0 版本,直接查看 corepack 显示是 0.25.2
而这个版本的 corepack 存在 bug, 访问不到终端代理,所以我们卸载这个版本,直接安装一个更高等级的
版本。我从公告中得知最低要 0.27 才修复了代理的bug。

执行以下命令进行升级:

npm uninstall -g yarn pnpm 
npm uninstall -g corepack
npm install -g corepack@v0.29.4

官方在 corepack 中默认集成了 yarn 和 pnpm, 所以卸载 corepack 时最好连这两个一起卸载了。
记得安装完 corepack 后再执行 corepack enable

使用 Corepack 安装 Yarn 4.1.1

直接执行 corepack enable, 会启用 corepack 的功能,并且将 nodejs 中关于 yarn 和 pnpm
的启动脚本添加到系统路径。注意这里的启动脚本本质是一个指向了 nodejs 的 corepack 包中名为
yarn 和 pnpm 的同名 js 脚本,这两个脚本负责检测 yarn 和 pnpm 是否已经安装在全局,没有时
会询问是否在线安装。

在这里插入图片描述

而默认安装的 yarn 是 1.22.22 版本,pnpm 是 9.13.2 版本

所以如果需要安装 4.0 的 yarn,我们直接手动安装就行

corepack install --global yarn@4.1.1

注意这个是直接连接官网镜像下载,需要配置终端代理来访问才好下载。

当执行完后,直接全局运行 yarn,就会显示版本是 4.1.1, 不会再询问是否下载了。

配置项目使用 Yarn 4.1.1

从 Yarn 1.X 版本迁移

根据 Yarn 官方的指导,从一个使用 Yarn 1.x 版本的项目迁移到使用 Yarn 4.0 可以按照以下步骤进行:

  1. 确保 nodejs 用的是 18 版本以上
  2. 执行 corepack enable 激活 Corepack 功能
  3. 进入到项目目录中
  4. 执行命令 yarn set version 4.1.1, 这条命令会在项目的 package.json 中添加以下内容,这是告诉 corepack 在处理 yarn 时,用哪个版本去安装依赖
{
  "packageManager": "yarn@4.1.1"
}
  1. 如果项目中依赖了 .npmrc 或者 .yarnrc, 需要参考 https://yarnpkg.com/configuration/yarnrc 里面的新配置项,将配置转为 .yarnrc.yml 的格式
  2. 执行 yarn install 安装项目依赖即可

注意此时的 yarn 是用 yarn PnP 来管理依赖,而不是传统的 node_modules 那样,yarn PnP 是 yarn 自己创建的管理依赖方式,安装的依赖包不会再出现在 node_modules 目录下面。

所以在执行 yarn install 之前,新建一个 .yarnrc.yml,
里面写上下面的内容,就可以用传统的 node_moudles 方式来管理依赖

nodeLinker: node-modules

如果是新的项目

新的项目可以直接执行下面步骤

  1. 执行命令 yarn set version 4.1.1
  2. 创建 .yarnrc.yml, 里面写上 nodeLinker: node-modules。虽然官方推荐用他们的 Yarn PnP 系统,但是这个并没有在社区推广开来,不建议使用,还是用原始的 npm 系统就好
  3. 执行 yarn install 就行。

如果需要配置 npm 淘宝镜像,可以在 .yarnrc.yml 里面配置

# 官方镜像
# npmRegistryServer: "https://registry.yarnpkg.com"

# 淘宝镜像
npmRegistryServer: "https://registry.npmmirror.com"

也可以配置成内部的私有 npm 镜像。

参考文档

https://yarnpkg.com/migration/guide
https://nodejs.org/api/corepack.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值