下午一点零五,刚把 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

Comments NOTHING