动机
节约磁盘空间并提升安装速度
当使用 npm
或 Yarn
时,如果你有 100
个项目使用了某个依赖,就会有 100
份该依赖的副本保存在硬盘上。 对于 pnpm
,依赖项将存储在一个内容可寻址的仓库中,因此:
- 如果你用到了某依赖项的不同版本,那么只会将有差异的文件添加到仓库。 例如,如果它有
100
个文件,而新版本只改变了其中1
个文件。那么pnpm update
只会向存储中心添加1
个新文件,不会仅仅因为单一的改变而克隆整个依赖。 - 所有文件都会存储在硬盘上的同一位置。 当多个包(package)被安装时,所有文件都会从同一位置创建硬链接,不会占用额外的磁盘空间。 这允许你跨项目地共享同一版本的依赖。
最终你节省了大量与项目和依赖成比例的硬盘空间,并且拥有更快的安装速度!
创建非扁平化的 node_modules 文件夹
当使用 npm
安装依赖时,所有的依赖都会被提升到模块的根目录。 因此,项目可以访问到未被添加进当前项目的依赖。
pnpm
使用软连接的方式将项目的直接依赖添加进模块文件夹的根目录。