为什么选择 pnpm
节省磁盘空间
使用 npm 时,如果你有 100 个项目都依赖某个包,磁盘上就会有该依赖的 100 份副本。使用 pnpm 时,该依赖会被存放在一个内容寻址存储中,于是:
- 如果你依赖该依赖的不同版本,只有内容不同的文件才会被加入存储。举例来说,如果它有 100 个文件,而新版本只在其中一个文件上有一处改动,
pnpm update只会向存储新增 1 个文件,而不是仅仅为这一处改动就克隆整个依赖。 - 所有文件都保存在磁盘上的同一个位置。安装包时,它们的文件从那个单一位置硬链接过去,不占用额外磁盘空间。这让你可以在项目之间共享同一版本的依赖。
结果就是,你在磁盘上节省的空间与项目和依赖的数量成正比,而且安装速度快得多!
加快安装速度
pnpm 分三个阶段执行安装:
- 依赖解析。识别出所有必需的依赖并拉取到存储。
- 目录结构计算。根据依赖计算
node_modules目录结构。 - 链接依赖。拉取所有剩余的依赖,并从存储硬链接到
node_modules。
这种方式比传统「先把所有依赖解析、拉取,再全部写入 node_modules」的三阶段安装过程要快得多。
创建非扁平的 node_modules 目录
用 npm 或 Yarn Classic 安装依赖时,所有包都被提升到模块目录的根部。结果是源代码能够访问那些并未作为依赖加入项目的依赖。
默认情况下,pnpm 使用符号链接,只把项目的直接依赖加入模块目录的根部。
如果你想进一步了解 pnpm 创建的独特 node_modules 结构,以及它为何能与 Node.js 生态良好协作,请阅读:
本页内容译自pnpm 官方文档(MIT License),如有出入以英文原文为准。