loading

pnpm与npm

Pnpm 本质上就是一个包管理器,这一点跟 npm/yarn 没有区别,但它作为杀手锏的两个优势在于

# 更快、更小

  • npm3之前,node_modules采用循环链式依赖的方式进行安装,由此产生的问题:依赖链路过长,大量重复安装的依赖包

  • 为了解决以上问题,npm3+和yarn 采用了拍平 node_modules 的方式进行安装,拍平后依赖链路不再嵌套,不会安装重复的包,因此产生的新问题,幽灵依赖

  • pnpm:

  • 装过的包都通过 hard links 存储在磁盘的 .pnpm-store 文件夹内,所有项目共用,相同的包直接复用

  • 不采用拍平的方式,绝不会下载重复的包

  • 当更新一个包时,如果原版本有100个文件,新版本只新增了1个文件,pnpm不会重新下载101个文件,而只是下载新增的1个文件

# 幽灵依赖

幽灵依赖,即某个包并没有在 package.json 中声明依赖,却能在项目中导入使用

如果使用 npm/yarn 安装依赖, node_modules 下将会同时有 packageA 和 packageB,且 project 中可直接 import packageB;某天 packageA 不再依赖 packageB ,project使用packageB这种做法将会报错

使用 pnpm ,node_modules不再拍平,将无法再使用幽灵依赖

在pnpm中,每个workspace下都有自己的node_modules,里面只能访问到在 package.json 里显示声明的 依赖包,而依赖包软链接到 全局node_modules下对应版本的 依赖包,没有任何一个包会安装多次

ps:pnpm默认是不拍平的,这能解决【幽灵依赖】,如果想要继续使用拍平的方式,也支持配置.npmrc hoist = true

最近更新时间: 2022/09/28 16:26:36
最近更新
01
2023/07/03 00:00:00
02
2023/04/22 00:00:00
03
2023/02/16 00:00:00