npm yarn pnpm 渊源

22 阅读2分钟

包管理

Q 什么是包管理 A 对相关依赖包的依赖关系以及文件存储进行管理

早期弊端

早期下载依赖的时候,不同的下载顺序,有可能造成不同包的提升,从而导致异常,为了保障每次下载依赖,都相同,那么就采取Lock机制

  1. 若无lock ,每次安装依赖,各个包版本可能发生改变,进而造成问题,确保每一次安装,依赖关系都是明确的,版本是唯一的。

workspaces

  1. 这个在包管理中,代表多包管理,多个子包,共用一个包

packagejson

  1. devdependencies
  2. 仅开发阶段使用,如测试包等,特点不会打包到产物
  3. peerDependency
  4. 指定特定包的依赖,必须安装
  5. dependency
  6. 被打包到生产环境中,项目运行时依赖。

pnpm

硬,软链接

npm 早期存在嵌套的,那嵌套导致的一个结果是包重复下载,占用空间,极端情况下多重嵌套,会突破系统限制的路径长度 之后 yarn 对于嵌套问题,主要处理为平铺模式,相同依赖进行提升,避免重复安装

因为平铺导致的幽灵依赖,隐士依赖,会导致隐形问题

因此产生了 pnpm 软硬链接,依然不懂

首先硬链接,通俗理解就是同一文件的多个引用,都指向同一个,删除任意一个不影响其它的引用 软链接就是,存储路径的文件.

对于Pnpm 来说先通过硬链接,将全局store中的npm包,链接到.pnpmstore中,之后nodemodules里面的各个包之间使用软链接,只保持访问路径

image.png 从官方图看其实就是内部软链接,间接通过硬链接找到全局store中的文件