本文讨论的版本是 Yarn 3.2.0

安装

环境: Node.js >= 16.2

新版的Yarn,使用corepack管理安装资源,所以需要先启用Node.js自带的corepack:

1
corepack enable

然后运行以下命令,初始化目录

1
yarn init -2 

生成的目录

1
2
3
4
5
6
7
8
9
10
11
.
├── .editorconfig
├── .git
├── .gitignore
├── .yarn
│ └── releases
│ └── yarn-3.2.0.cjs
├── .yarnrc.yml
├── README.md
├── package.json
└── yarn.lock

.pnp.cjs

pnp的全称是:Plug’n’Play

文件的作用

帮助Yarn管理依赖。

包含了以下信息:

  • 当前依赖树中包含了哪些依赖包的哪些版本
  • 依赖包之间是什么关联关系
  • 依赖包的资源在文件系统中的具体位置

解决的问题

Yarn 不需要再拷贝依赖到node_module目录,从而避免大量的I/O操作。同时,项目目录也不会有node_module目录生成。

为什么可以避免大量的I/O操作?
具体要从旧版Yarn 1.*的安装依赖流程说起:

1. 将依赖包的版本区间解析为某个具体的版本号
2. 下载对应版本依赖的tar包到本地离线镜像
3. 将依赖从离线镜像解压到本地缓存
4. 将依赖从缓存拷贝到当前项目的node_module目录

可以看出,第3、4步需要进行I/O操作。而新版的Yarn,避免了第4步的拷贝动作,不需要从缓存拷贝到node_module目录。
Yarn只需要维护一张静态映射表,也即`.pnp.cjs`。

指定npm源

命令

1
yarn config set npmRegistryServer https://registry.npmmirror.com

手动修改

打开.yarnrc.yml,增加下面一行语句:

1
npmRegistryServer: "https://registry.npmmirror.com"

Yarn 1.*怎么指定npm源?
npm一样,使用.npmrc文件中的设置。

设置私源

例如要安装@leon/**的私源依赖包,
修改.yarnrc.yml,加入以下语句:

1
2
3
4
5
6
npmScopes:
leon:
# 发布
npmPublishRegistry: "https://registry.leon.com"
# 安装
npmRegistryServer: "https://registry.leon.com"

解除 https 访问限制

Yarn默认只支持https协议

修改.yarnrc.yml,加入域名白名单:

1
2
3
unsafeHttpWhitelist:
"*.example.org"
"example.org"

参考