pnpm入门

139 阅读3分钟

pnpm是什么

新一代的包管理工具,pnpm = performant npm;从名字中自然是比npm更高性能,那么它的高性能,具体表现在哪些方面?

  1. 节约磁盘空间;
  2. 提高安装速度;
  3. 创建一个非扁平的node_modules目录, 可以区分直接依赖&间接依赖;

pnpm/npm生成的node_modules

npm生成的node_modules

可以先来看看npm和pnpm生成的node_modules

npm生成的node_modules目录, 所有的依赖是平铺在node_modules底下的; 如果多个项目都引用同一个包,都需要重新下载,做不到资源的共享。

pnpm生成的node_module目录

pnpm add express -w 命令安装一个express依赖后生成的目录 ; 可以看到node_moduls中的目录结构主要有以下三级,

node_moduels
  - express(直接依赖)
  - .pnpm
  - .modules.yaml

/express目录

  1. express目录右边有个箭头,这其实是个软链接,真实链接到.pnpm/express@4.21.1/node_modules/express下,
  2. express目录只维护了直接依赖,间接依赖全部维护在 .pnpm/express@4.21.1/node_modules/ 底下;

/pnpm目录

该目录维护了所有的依赖,其采用硬链接,链接到pnpm的store存储中;

store存储

  • store类似vuex中的store,依赖的集中存储在硬盘的某一位置,所以不同项目可以相互引用,起到了节约磁盘空间的作用;可以跑以下命令找到store的具体目录;
store存储的好处
  • 相同名字和版本的包只会在store中安装一次;
  • 如果你用到了某依赖项的不同版本,只会将不同版本间有差异的文件添加到仓库。 例如,如果某个包有100个文件,而它的新版本只改变了其中1个文件。那么 pnpm update 时只会向存储中心额外添加1个新文件,而不会因为仅仅一个文件的改变复制整新版本包的内容。 所以整个安装速度会比较快;

关键知识点——软链接和硬链接

软链接(Symbolic Link)

  • 是一个特殊的文件,比如A是B的软链接,A和B执行两个不同的数据块,A中存放的是B的路径,所A 和 B 之间是“主从”关系,如果 B 被删除了,A 仍然存在(因为两个是不同的文件),但指向的是一个无效的链接。

硬链接(Hard Link)-ln

  • 通过索引节点来进行链接,比如有A、B两个文件名指向同一份文件,就是指向同一索引节点,可以使得一个文件拥有多个有效的路径名,防止被"误删"

软链接和硬链接在pnpm中应用

直接依赖软链接到.pnpm中,.pnpm中的资源硬链接到store中,store中的资源全局垮项目共享;

和其他包管理工具的比较

有哪些开源库在使用

参考

pnpm

第六节:pnpm剖析(简介、硬/软链接、实操、配置、原理) - Yaopengfei - 博客园