原来项目的痛点:程序员的电脑中有多个项目,每一个项目都有 node_modules ,node_modules 文件占用了大量的存储空间。
前期知识:软连接、硬链接
硬链接
电脑文件系统中的多个文件平等地共享同一个文件存储单元,删除一个文件名字后,还可以用其它名字继续访问该文件。
软连接
以绝对路径或者相对路径的形式指向其它文件或者目录的引用.
硬链接和软连接的举例
- 文件的拷贝:在硬盘中复制出来一份新的文件数据
window: copy foo.js foo_copy.js
macos : cp foo.js foo_copy.js
- 文件的硬链接
window: mklink /H aaa_hard.js aaa.js
macos : ln foo.js foo_hard.js
- 文件的软连接(快捷方式)
window: mklink aaa_soft.js aaa.js
macos : ln -s foo.js foo_copy.js
pnpm作用:
当使用 npm 或 Yarn 时,如果有 100 个项目,并且所有项目都有一个相同的依赖包,那么, 你在硬盘上就需要保存 100 份该相同依赖包的副本(相当于文件的拷贝)。
使用 pnpm,100个项目的依赖包将被存放在一个统一的位置。
1. 如果你对同一依赖包使用相同的版本,那么磁盘上只有这个依赖包的一份文件;
2. 如果你对同一依赖包需要使用不同的版本,则仅有版本之间不同的文件会被存储起来;
所有文件都保存在硬盘上的统一的位置: 当安装软件包时, 其包含的所有文件都会硬链接到此位置,而不会占用 额外的硬盘空间。
示意图:左侧是NPM/yarn方式,每一个项目都有独自的依赖包文件夹,右侧公用。
require 引用 axios,会去 node_modules 中找,只能看到 axios 包,解决了node_modules中包含非主观想要的包的问题,axios 的依赖包不在 node_modules 下。
pnpm的安装和使用
pnpm的官网:https://pnpm.io/zh/