特征 | npm | yarn | pnpm |
---|---|---|---|
速度 | 慢 | 快 | 飞快 |
磁盘占用 | 大 | 小 | 很小 |
流行度 | 第一队 | 第二队 | 第三队 |
从上面表格所示
npm 发行于 2010 年,因为集成在 node 环境中所以称为流行度最高的包管理工具,但具有下载速度慢,体积较大的缺点;之所以磁盘占用大,是因为每个项目执行 npm install 命令时都会生成一个独立的 node_modules 。
yarn 发行于 2016 年,由 faceBook 推出 包管理工具,yarn 的以来下载采用并行下载安装,因为具备同包缓存的功能所以支持离线安装。速度要快于npm
pnpm 发行于 2017 年,使用硬链接来管理依赖项,速度和容量都要优于 npm 和 yarn
根据上面的解释产生疑问,什么是硬链接?pnpm 的磁盘占用量为什么比 npm 和 yarn 小?
- Pnpm 使用硬链接来管理依赖项。硬链接是文件的另一个名称,它指向同一文件的数据。这意味着 Pnpm 只需要存储一个文件,即使它被多个项目引用。
- Pnpm 使用并行安装来安装依赖项。这意味着 Pnpm 可以同时安装多个依赖项,这可以加快安装时间。
- Pnpm 使用缓存来存储已经安装的依赖项。这意味着 Pnpm 在未来安装依赖项时不需要重新下载它们,这可以加快安装时间。
Pnpm 比 NPM 和 Yarn 的磁盘占用更小的原因是它使用硬链接来管理依赖项。硬链接只占用文件原始大小的空间,即使它被多个项目引用。
硬链接是文件的另一个名称,它指向同一文件的数据。硬链接可以创建在同一文件系统上的不同目录中,也可以创建在不同的文件系统上。硬链接不会创建一个新的文件,而是指向原始文件的数据。这意味着硬链接不会占用任何额外的磁盘空间。
同问 yarn 的磁盘占用要小于 npm, yarn是不是也是用了硬链接技术?
Yarn 确实使用了硬链接技术来减少磁盘占用率。但是,Yarn 与 Pnpm 的硬链接实现不同。Pnpm 使用硬链接来管理所有依赖项,而 Yarn 只使用硬链接来管理共享的依赖项。
Yarn 的共享依赖项是在多个项目中使用的依赖项。Yarn 会自动识别这些依赖项,并将它们存储在一个共享目录中。
Yarn 共享依赖的规则:
- 依赖项必须在项目的
package.json
文件中列出。 - 依赖项必须在项目的依赖项图中是直接依赖项。
- 依赖项必须在项目的依赖项图中没有被其他依赖项覆盖。
理论上来说如果 yarn 本地存储的共享依赖项足够多就可以达到 pnpm 的速度和磁盘占用效果