Yarn安装配置技巧 包管理工具快速上手

阿木 发布于 14 小时前 3 次阅读


下午一点零五,刚把 Node.js 更新完,窗外雾蒙蒙的。

刚开始的时候,我是极其固执的,认为仅仅有npm便已经足够了,何必再去折腾Yarn呢。

要是没有那次周五下班之前把代码提交上去,同事那边就不会跑不起来,lock文件也不会冲突得乱七八糟,那个下午真的真是让人有一种想将电脑砸掉的冲动。

过后才清楚,关于包管理这个情况,稳定相较于快速而言更为关键,然而 Yarn 却表示:我要全部都拥有。

为什么非得是 Yarn?

就因为它快吗?

算是,但不全是。

那时,npm进行装机包的操作是串行的,是一个接着一个的状态,这般情形像极了在早高峰时段堵车的状况。

Yarn 上来就并行,咔嚓咔嚓,依赖哗啦啦往下掉 。

第一次用的时候我还愣了一下,心想这就装完了?

更戳我的其实是那个 yarn.lock。

npm install -g yarn

这东西怎么说呢,就像给项目上了一道保险。

切勿忧心“我这边状况良好,你那边为何就崩溃了”,将锁文件放置于一处,所有人的node_modules仿若由同一个模具塑造而成。

brew install yarn

安全感,懂吧?

装它,没那么玄乎

官网溜达一圈,或者一行命令的事儿。

npm install -g yarn

yarn --version

或者你用 Homebrew:

brew install yarn

yarn config set cache-folder /path/to/cache

装完敲个 yarn -v,蹦出版本号就成了 。

我习惯接着配个镜像源,毕竟咱这网络环境你懂的:

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

# 设置缓存目录
cache-folder "/path/to/cache"
# 设置包镜像源
registry "https://registry.npm.taobao.org/"

速度飞起,谁用谁知道 。

那些让人上头的用法

yarn init 开新项目,一路回车,舒服。

yarn add 

加个 lodash?

yarn add lodash

yarn upgrade 

想挪走?

yarn remove lodash

yarn remove 

开发依赖?

加个 --dev 完事儿 。

yarn add  --dev

但让我觉得 Yarn 特聪明的是它那个离线缓存。

只要装过一次的包,下次直接硬盘里拉出来,不用再去网络里捞。

断网的时候还能装依赖,这事儿说出去都觉得神奇。

{
  "private": true,
  "workspaces": ["packages/*"]
}

你以为它只是个装包工具?

格局小了

Workspaces 这东西,一开始我没当回事。

一直持续到开启对 Monorepo 的摆弄,众多项目被放置于同一个仓库内,更何况依赖还得分别进行管理,往昔运用 npm 来操作,那真可谓是令人头疼至极。

一旦开启 Yarn 的 Workspaces,依赖便会自动为你进行链接处理,公共包会被提升至根目录位置,如此一来,既能节省空间,又不会出现混乱状况。

{
  "installConfig": {
    "pnp": true
  }
}

还有那个 Plug'n'Play,简称 PnP。

说实话,我头一回看文档的时候,也没怎么弄明白,啥叫“没有 node_modules”,这不是在开玩笑嘛?

此后进行了尝试,的确没有生成那个既深且长的文件夹,而是创建了一个.pnp.js 文件,直接告知 Node 包的所在位置。

yarn config set enableOfflineMirror true

启动速度蹭蹭的,只是有些工具得适配一下 。

翻车现场与救场指南

yarn config set yarn-offline-mirror ./offline-cache

当然,Yarn 也不是没脾气。

曾有一回,CI 始终出现报错情况,本来在本地运行得好好的,然而 yarn install --frozen-lockfile 这一操作却无论如何都无法顺利通过。

捣鼓了好一阵子,发觉原来是lock文件冲突的问题没有处理完毕,通过手动删除后再重新生成,这才安静下来了。

还有时候装到一半卡住,多半是网络抽风。

yarn init

切一下镜像源,或者关掉代理试试 。

只是,最使我心里觉得别扭的是,Yarn 1与Yarn 2/3之间那极为巨大的割裂感觉。

配置方式变了,命令也变了,社区里吵来吵去 。

yarn init -y

当下,我这儿存在着诸多的老项目,这些老项目依旧是在运用Classic版本,而对于新项目,才敢去启用Berry。

跟 npm 和 pnpm 比呢

yarn add lodash

实话讲,当下npm的速度已然挺快了,在v7之后,存在锁文件,并且有workspaces。

但 Yarn 那种“稳”的感觉还是不一样。

yarn add lodash@4.17.20

可能是早期的苦吃多了,对 yarn.lock 有感情。

yarn add lodash axios

然而,pnpm 近来的态势着实迅猛异常,其运用硬链接节省磁盘空间这一方式,着实堪称厉害非凡,哪怕是一个 React 应用要安装于一百个项目之中,也并不会占据过多的存储空间,是这种厉害之处的体现。

并且,它在默认状态下,对“幽灵依赖”予以禁止,迫使你将每一个依赖都清晰地写出来,从长远的角度去看,这无疑是一件好事。

yarn add jest --dev

但你要问我个人偏好?

我还是留在了 Yarn。

习惯这东西,改起来也费劲。

yarn install

最后说点大实话

Yarn并非毫无瑕疵,存在版本分裂情况,时不时会出现状况,学习新特性所需成本较高……然而它陪伴着我历经了无数次rm -rf node_modules以及npm i的循环。

工具嘛,说到底是为了让人省心,不是添堵。

yarn upgrade lodash

要是你未曾尝试过,发起自 Yarn 1 起始,配置一个淘宝源,去安装一个包,以此感受一番那种“嗖”一下子出现的愉悦之感。

说到是否要去采用 PnP、Workspaces,别急着做决定,缓缓地推进,因为遭遇困难从中获得经验也是学习进程里的一部分内容。

yarn upgrade lodash@4.17.20

现在很多人讨论 pnpm、bun 会不会取代 Yarn 。

谁知道呢?

yarn remove lodash

前端圈哪天不换个工具才奇怪。

可当年 Yarn 从 npm 手里夺取“最好用包管理器”这一名号之际,那股革新的劲头,着实改写了历史。

至少在我这,它值一个赞。

yarn run start