你好 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的主要内容,如果未能解决你的问题,请参考以下文章