起因是维护的项目越来越多,每个项目都install一次,每个项目都有node_modules,我的磁盘快满了,而且不知怎么回事有个项目的node_modules居然占了好几个G??!!我果断删了重新装,但是装了好长时间......,这又占空间还安装慢开发体验太差了,这时救星来了,那就是pnpm
pnpm是什么
大家对npm和yarn并不陌生,其实pnpm和他们是一样的都是一个包管理工具,但为什么要用pnpm?
硬链接节约磁盘空间
pnpm 内部使用基于内容寻址的文件系统来存储磁盘上所有的文件,这个文件系统出色的地方在于:
1.不会重复安装同一个包。用 npm / yarn 的时候,如果 100 个项目都依赖 vue,那么 vue 很可能就被安装了 100 次,磁盘中就有 100 个地方写入了这部分代码。但使用 pnpm 只会安装一次,磁盘中只有一个地方写入,后面再次使用都会直接使用 hardlink(硬链接,不清楚的同学详见这篇文章 Linux软连接和硬链接)。
2.即使一个包的不同版本,pnpm 也会极大程度地复用之前版本的代码。举个例子,比如 vue 有 100 个文件,更新版本之后多了一个文件,那么磁盘当中并不会重新写入 101 个文件,而是保留原来的 100 个文件的 hardlink,仅仅写入那一个新增的文件。
软连接优化依赖管理
我们用npm 和 pnpm 分别安装vue 直观一点比较两种安装的区别

大家疑惑的是pnpm安装的vue必要的依赖都删除了吗?为什么会少这么多依赖?其实并没有少而是都在.pnpm文件夹里
但是这种目录结构,不符合 require() 不断向上寻找 node_modules 中依赖的规则,vue 怎么获取这些资源呢?
仔细观察,我们会发现,node_modules 的 vue 其实只是一个软链接(常用 Windows 的同学可以理解为快捷方式)。

它真正指向的位置是.pnpm目录中对应的包。
pnpm 将包本身和依赖放在同一个 node_modules 下面,实现了与原生 require() 的兼容。 依赖都是以软链接的形式引入,其本体也以同样的结构组织起来。 于是,所有的包的依赖文件结构,都与其 package.json 中的声明保持一致,不再如先前一般让人眼花缭乱。
pnpm使用
好了,我们大概的原理了解了,现在开始使用吧,带给你飞一般的感觉
首先,删除 package-lock.json 文件以及 node_modules 目录。 确保通过 npm i -g pnpm 安装好 pnpm 的前提下,执行 pnpm install 安装全部依赖。
与 npm 类似,pnpm 通过以下命令进行依赖安装与卸载:
# 根据 package.json 中的依赖声明安装全部依赖
pnpm install
# 安装指定依赖,并在 dependencies 中声明依赖
pnpm install -S xxx
# 安装指定依赖,并在 devDependencies 中声明依赖
pnpm install -D xxx
# 卸载指定依赖
pnpm uninstall xxx
如果你曾经是 npm / yarn 的用户,迁移 pnpm 在命令使用方面基本是没有什么成本的。这方面,pnpm 官方文档 中也有非常详细的介绍。
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:https://mi-blog.cn/index.php/2022/06/27/%e5%b0%9d%e8%af%95pnpm/