Skip to content

pnpm 为什么完爆npm和yarn? [PNPM]https://juejin.cn/post/7127295203177676837

公共依赖问题

  • npm2 会循环嵌套依赖

  • yarn、npm3 会把循环嵌套的依赖铺平

具体处理方式:

  1. 将第一个遇到的提升到顶层
  2. 版本冲突时,放在父依赖的顶层
  3. 遵循node的模块解析算法,从当前目录的 node_modules 逐级往上查找;
md
示例场景:

- 包A依赖 lodash@4
- 包B依赖 lodash@5
处理结果:
node_modules/
├── lodash@4(提升到顶层)
└── 包B/
    └── node_modules/
        └── lodash@5(嵌套安装)

有以下的问题:

  1. 幽灵依赖, 项目代码可能意外访问到顶层;
  2. 依赖树结构不稳定,依赖安装顺序的不同可能导致结构变化;

将一个包链接到全局node_modules目录下,这样就可以在全局使用这个包了; 比如,如何将本地包链接到全局;

硬链接-软链接

pnpm是通过使用硬链接,实现多个文件夹共用同一个全局文件.pnpm/store,从而大量减少磁盘消耗; 然后在node-modules下的.pnpm,通过软链接连接到./pnpm/,不允许使用未声明的依赖,从而避免幽灵依赖?

  • tips: 注意区分全局下的.pnpm以及每个包自己的.pnpm

pnpm

硬链接:文件的副本,占用磁盘空间 符号链接、软链接:快捷方式,不占用磁盘空间

在npm和/yarn中,每个项目独立复制依赖文件,占用空间大; 比较混乱,可能导致幽灵依赖和依赖冲突问题;

本站访客数 459 人次 本站总访问量 948
加载中