你好 Yarn 2,再见 node_modules

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了你好 Yarn 2,再见 node_modules相关的知识,希望对你有一定的参考价值。

参考技术A 三年多前,在 2017 年的时候, Yarn1.0 在 Facebook 的工程师的博客中被正式宣布。在首次发布仅 11 个月后,已有超过 175,000 个存储库开始使用新的包管理器。

Yarn 从那时起一直在稳步发展,成为 npm 包管理工具的替代品,但是还是会有包管理工具共有的毛病,比如速度缓慢、复杂性增加和数据占用。

相较于初始的版本,Yarn2 进行了一些根本性的更改,不仅解决了这些问题,还改进了整体工作流程。

当时流行的一个 搞笑 图在 Yarn2 中将不复存在!

新的版本其实在去年一月份就(2020年)发布了,但是花了更多的时间去适配大型项目和库。

一些大公司仍在努力实现兼容性(适配Angular、React Native 和 Flow),但现在已经可以在你的代码中使用 Yarn2 了!(可惜笔者的技术栈是Vue,Yarn2 并没有适配)

即用支持并不是 Yarn 2 带来的唯一重大变化(这个概念本身不是全新的,可以追溯到 2018 年 9 月),该更新实际上提供了许多很棒的功能,让编程变得更加美好简单。

Yarn 的维护者在这些改进上投入了整整一年的时间,你绝对可以感觉到 Yarn 2 是一款经过深思熟虑的产品。

以前的 Yarn CLI 输出就像老太婆的裹脚布一样,又臭又长。而 Yarn2 从更加结构化的 CLI 输出开始,格式和颜色大大提高可读性,最重要的是,每一行都有自己的错误代码,因此变得更容易调试。

新版本显著减少了文件 I/O 数量,从而在安装过程中节省了大量的时间。

Yarn 现在包含一个单地图文件 pnp.js ,用来跟踪包引用并确保节点在运行代码后熟悉正确位置。

.yarn 文件夹会包含下载的软件包,保存在硬盘的某个位置上,那个位置是你的那些依赖项被缓存的地方。

总而言之,惹人烦的 node_modules 没有了!

更重要的是,Yarn2 提供了详细的旧项目迁移文档,在迁移后不会丢失node_modules文件夹 ,还等什么?赶紧上 yarn 官网查看迁移文档完善你的项目吧!

Yarn workspace + lerna 在每个子包中创建 node_modules

【中文标题】Yarn workspace + lerna 在每个子包中创建 node_modules【英文标题】:Yarn workspace + lerna is creating node_modules in each sub-package 【发布时间】:2020-08-16 11:56:10 【问题描述】:

我有一个 monorepo,我正在使用 yarn workspaces + lerna 进行管理。据我了解,运行yarn 应该在项目的根目录下创建一个node_modules 目录,但不是 在每个单独的包中。我正在关注作者所说的教程:

yarn 工作空间只创建一个 node_modules 文件夹。所有依赖项都被提升到根文件夹

这个假设总是正确的吗?或者是否存在 yarn + lerna 会在每个包中创建单独的 node_modules 目录的情况?

【问题讨论】:

【参考方案1】:

我读了几篇文章,对同样的事情感到困惑。

简短的回答是,你是对的。 Yarn 为每个包创建 node_modules 以及在你的 repo 根目录中的 node_modules 目录。

换句话说,Yarn 在你所有的包中创建/packages/<package>/node_modules。但是,/packages/<package>/node_modules 目录将通过重用 /node_modules 中的依赖关系进行优化。这基本上就是这些作者想要表达的意思!

总而言之,你将拥有n + 1 node_modules 目录,其中n 是你拥有的包的数量,假设你所有的包都有依赖关系。

让我们考虑一个例子:

yarn workspace package-1 add commander

如果/packages/package-1/node_modules/commander 已经在兼容版本的/node_modules/commander 中,则不会创建它。

现在让我们看另一个案例:

yarn workspace package-1 add chalk

如果 Yarn 不能重用 /node_modules 中的内容,它将在本地安装包,在我们的例子中是 /packages/package-1/node_modules/chalk

您可以在 Yarn 的官方博客中阅读更多相关信息:https://classic.yarnpkg.com/blog/2017/08/02/introducing-workspaces/

【讨论】:

以上是关于你好 Yarn 2,再见 node_modules的主要内容,如果未能解决你的问题,请参考以下文章

Yarn 2:如何从 `node_modules/.bin` 目录运行脚本?

2月再见,3月你好!

再见Restful,你好GraphQL

再见了苦逼的7月,你好8月!

2017再见~2018你好!

再见,Python。你好,Go 语言