网站首页 > 技术文章 正文
新人求关注?,点击右上角 ↗? 关注,博主日更,全年无休,您的关注是我的最大的更新的动力~ 感谢大家了
pnpm 的机制非常强大,可以说它对 npm 和 yarn 发起了一场降维打击。
接下来我们来看一下包管理工具的发展历史,以及它们各自的优势。
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 的魔力在于:
- 全局存储: Pnpm 将每个包的版本存储在一个全局位置(~/.pnpm-store)。
- 硬链接(提高速度): Pnpm 使用硬链接将全局存储中的包链接到项目的 .pnpm 目录中,形成扁平化结构。
- 软链接(增加灵活性): 最后,Pnpm 使用软链接将项目的 node_modules 与 .pnpm 目录中的特定包版本连接起来。
让我们深入了解这些链接:
- 硬链接: 直接指向磁盘上原始文件的位置,就像是数据共享的克隆。
- 软链接: 指向另一个文件或目录的快捷方式,就像一个别名。
这个巧妙的系统确保了:
- 闪电般的安装速度: 不再需要多次下载相同的包,Pnpm 只需链接到已存在的包!?
- 极小的磁盘使用量: 共享依赖最大化了存储效率。
- 告别幽灵依赖! Pnpm 的严格链接机制防止了意外依赖未声明的包。
胜利的公式:快速、高效且可靠
Pnpm 通过创新的符号链接和全局存储机制,成为现代 JavaScript 开发的终极解决方案。告别过去的限制,迎接包管理的未来吧!
小结
欢迎留言评论,大家一起探讨,一起进步~ 欢迎点赞、关注?、转发~
求关注~全年无休日更~ 求关注~
猜你喜欢
- 2024-10-12 Excel查找重复次数最多的项目 excell查找重复数据
- 2024-10-12 经典动态规划题——打家劫舍 打家劫舍猜一肖
- 2024-10-12 函数公式的左膀右臂:ROW、COLUMN函数知多少
- 2024-10-12 C|二维数组做函数参数求矩阵乘积 c二维数组作为函数参数
- 2024-10-12 sum() 函数性能堪忧,列表降维有何良方?
- 2024-10-12 【译】Vue 何以对 React“降维打击”?
- 2024-10-12 奇异值分解与主成分分析,一文带你理解Spark分布式降维方法
- 2024-10-12 收下这波 JS 技巧,从此少加班 js怎么做加法
- 2024-10-12 不足 20 行 Python 代码,高效实现 k-means 均值聚类算法
- 2024-10-12 盘ES6、ES7、ES8、ES9、ES10 es6解构赋值
你 发表评论:
欢迎- 最近发表
-
- 在 Spring Boot 项目中使用 activiti
- 开箱即用-activiti流程引擎(active 流程引擎)
- 在springBoot项目中整合使用activiti
- activiti中的网关是干什么的?(activiti包含网关)
- SpringBoot集成工作流Activiti(完整源码和配套文档)
- Activiti工作流介绍及使用(activiti工作流会签)
- SpringBoot集成工作流Activiti(实际项目演示)
- activiti工作流引擎(activiti工作流引擎怎么用)
- 工作流Activiti初体验及在数据库中生成的表
- Activiti工作流浅析(activiti6.0工作流引擎深度解析)
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)