image.png

节约磁盘空间

在使用 pnpm 时,依赖会被存储在内容可寻址的存储中,所以:

  • 如果你用到了某依赖项的不同版本,只会将不同版本间有差异的文件添加到仓库。
  • 所有文件都会存储在硬盘上的某一位置。

    创建非扁平化的 node_modules 文件夹

    image.png
    使用 npm 或 Yarn Classic 安装依赖项时,采用扁平化的安装方式。默认情况下,pnpm 使用软链的方式将项目的直接依赖添加进模块文件夹的根目录。

    如果您的工具不适用于符号链接,您仍然可以使用 pnpm 并将 node-linker 设置设置为 hoisted。 这将指示 pnpm 创建一个类似于 npm 和 Yarn Classic 创建的 node_modules 目录。

思想

pnpm 按照机制,包是从全局 store 硬连接到虚拟 store 的,这里的虚拟 store 就是 node_modules/.pnpm。
image.png
所有的依赖都在这里铺平了,都是从全局 store 硬连接过来的。
image.png
然后包和包之间的依赖关系是通过软链接组织的。
image.png
也就是说,所有的依赖都是从全局 store 硬连接到了 node_modules/.pnpm 下,然后之间通过软链接来相互依赖。

总结

  • 快:通过链接的方式引入依赖而不是复制。
  • 节约磁盘:一个包在全局值保存一份,剩下的都是软硬链接。