计算机系统应用教程网站

网站首页 > 技术文章 正文

pnpm 如何对 npm 和 Yarn 进行降维打击

btikc 2024-10-12 10:49:54 技术文章 2 ℃ 0 评论

新人求关注?,点击右上角 ↗? 关注,博主日更,全年无休,您的关注是我的最大的更新的动力~ 感谢大家了

pnpm 的机制非常强大,可以说它对 npmyarn 发起了一场降维打击。

接下来我们来看一下包管理工具的发展历史,以及它们各自的优势。

Npm2 的时代:嵌套依赖的噩梦

在 npm 3.0 之前,我们的 node_modules 就像一个混乱的嵌套依赖丛林 。每个包及其依赖都有自己的 node_modules 文件夹。

node_modules
├─ express
│  ├─ index.js
│  ├─ package.json
│  └─ node_modules
│     ├─ accepts
│     │  ├─ index.js
│     │  ├─ package.json
│     │  └─ node_modules
│     │     ├─ mime-types
|     |     |   └─ node_modules
|     |     |      └─ mime-db
|     │     └─ negotiator
│     ├─ array-flatten
│     └─ ...
└─ A
   ├─ index.js
   ├─ package.json
   └─ node_modules
      └─ accepts
         ├─ index.js
         ├─ package.json
         └─ node_modules
            ├─ mime-types
            └─ negotiator

它的缺点非常明显:

  • 安装速度极慢: 多次下载和安装相同的包,导致项目启动需要很长时间。
  • 磁盘空间浪费: 重复的依赖大量占用存储空间。
  • 路径长度问题: 嵌套文件夹会产生极长的文件路径,甚至在 Windows 系统中超出路径长度限制。

? Yarn 的救赎(有点):扁平化依赖

Yarn 像个英雄一样出现,引入了扁平化依赖的概念,试图将所有包安装在 node_modules 顶层,避免了依赖嵌套的混乱。

但 yarn 也有其不足之处:

  • 幽灵依赖: 你可以访问并未在 package.json 中明确声明的包,虽然方便,但存在风险。
  • 磁盘空间问题仍然存在: 如果项目需要不同版本的同一包,yarn 仍会进行重复安装。

Pnpm:游戏规则的改变者

Pnpm 带着一种革命性的方法进入了场景:全局存储与符号链接



pnpm 的魔力在于:

  1. 全局存储: Pnpm 将每个包的版本存储在一个全局位置(~/.pnpm-store)。
  2. 硬链接(提高速度): Pnpm 使用硬链接将全局存储中的包链接到项目的 .pnpm 目录中,形成扁平化结构。
  3. 软链接(增加灵活性): 最后,Pnpm 使用软链接将项目的 node_modules 与 .pnpm 目录中的特定包版本连接起来。

让我们深入了解这些链接:

  • 硬链接: 直接指向磁盘上原始文件的位置,就像是数据共享的克隆。
  • 软链接: 指向另一个文件或目录的快捷方式,就像一个别名。

这个巧妙的系统确保了:

  • 闪电般的安装速度: 不再需要多次下载相同的包,Pnpm 只需链接到已存在的包!?
  • 极小的磁盘使用量: 共享依赖最大化了存储效率。
  • 告别幽灵依赖! Pnpm 的严格链接机制防止了意外依赖未声明的包。

胜利的公式:快速、高效且可靠

Pnpm 通过创新的符号链接和全局存储机制,成为现代 JavaScript 开发的终极解决方案。告别过去的限制,迎接包管理的未来吧!

小结

欢迎留言评论,大家一起探讨,一起进步~ 欢迎点赞、关注?、转发~

求关注~全年无休日更~ 求关注~

#记录我的9月生活#

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表