npm、yarn和pnpm

1 node_modules安装方式

在npm@3之前是以嵌套结构方式安装依赖包,存在两个问题:

  • 依赖路径太长
  • 多个包依赖一个相同包时,本地磁盘会存储多个相同的包

npm@3和yarn使用扁平化结构,node_modules变成所有包放在同一层级

注意 :多个版本的包只有一个会被提升至顶层,其他版本的包会嵌套安装到各自依赖中

哪个版本的包被提升依赖于package.json中包的前后顺序,于是又会出现新的问题:
依赖结构不一致导致扁平化后的结果也不一致

于是出现package-lock.jsonyarn.lock保证install后产生确定的依赖结构

幽灵依赖:是指在package.json中未定义的依赖,但在项目中依然可以正确被引用到

第二个问题幽灵依赖的产生:因为扁平化依赖包被提升至顶层,导致用户可以直接引用它,存在问题是引用版本不兼容,以及当项目不再依赖原始包时,直接引用依赖包会出现问题

第三个问题 是:依赖分身和依赖提升机制可能导致大量依赖被重复安装,以下示例无论提升B@1.0还是B@2.0都会存在重复版本包被安装

2 yarn解决了上面哪些问题?

  • 提升安装速度:npm安装包时是串行的,每个包按照顺序安装;yarn采用并行操作。在缓存中,yarn会将每个包缓存在磁盘上
  • 使用yarn.lock记录依赖信息,保证得到稳定的依赖结构

注意:没有解决幽灵依赖和依赖分身问题

3 pnpm如何解决上述问题?

内存寻址存储策略:将包安装在系统的全局存储中,依赖的每个版本只会安装一次,在引用依赖时,会通过硬链接和软链接找到该文件,为实现此过程,node_modules下会出现.pnpm目录

  • 硬链接:使用户可以通过路径查找到全局存储中的源文件
  • 软链接:通过它可以找到对应磁盘目录下的依赖地址

(1)幽灵依赖问题 :只有直接依赖会平铺在node_modules下,子依赖不会被提升

(2)依赖分身问题:相同依赖只会在全局存储中安装一次。

弊端

  • pnpm创建的node_modules依赖于软链接,在不支持软链接的环境中无法使用,例如:Electron
  • 依赖源文件安装在全局存储中,调试依赖或给依赖打补丁不方便
相关推荐
国科安芯1 小时前
航天电子模拟前端三大支柱:精密运放、高速运放与电压监控的协同设计方法——ASL8522S/ASL622S/ASL706S技术解析
前端·单片机·嵌入式硬件·fpga开发·架构·安全性测试
神明不懂浪漫2 小时前
【第四章】CSS(二)——文本外观属性与复合选择器
前端·css·经验分享·笔记
kyriewen2 小时前
别再用AI debug了——这5种bug越修越烂
前端·javascript·ai编程
星释3 小时前
鸿蒙智能体开发实战:39.鸿蒙壁纸大师 - 前端卡片显示与交互优化
前端·华为·交互·harmonyos·鸿蒙·火山引擎
顾昂_3 小时前
内存泄漏排查和 Chrome DevTools 使用教程
前端·javascript·面试
IT_陈寒4 小时前
Java线程池这个坑我算是踩明白了
前端·人工智能·后端
31535669135 小时前
Superpowers:GPT-5.6 时代下的流程毒瘤
前端·后端
清秋6 小时前
全网最全 ECMAScript 攻略( 更新至 ES2026)
前端·javascript·编程语言
Cao_Ron6 小时前
用 SVG image symbol 画 ECharts graph 圆形节点
前端
hxy06016 小时前
React-Call让你的React组件像异步函数一样调用
前端·react.js