- 前言:前段时间出去面试,面试官问到 pnpm 你了解吗?
- 我的内心:讲真我没用过,但作为一个不定时关注技术论坛的开发来说,我确实是有看到过的,至于记得什么,我的脑海中也就只剩下一个”幽灵依赖“的词汇了。
- 我回答:嗯,我是有了解过的。基本上是跟 yarn,npm 类似,但是他帮我们解决了幽灵依赖的问题
- 面试官(一幅不屑):嗯,他主要还是帮我们做了一个全局搜索依赖的,已经安装过的依赖就不再安装,解决了磁盘空间占用过多的问题。
- 话不多说,让我们来真正了解一下 pnpm 把。
pnpm 有什么优势
- 在性能上有了极大的提升,根据目前官方提供的数据来看,pnpm 是传统的 npm、yarn 包管理工具的速度的两倍
- 基于 hardlink 机制,在全局 store 中存储 node_modules 依赖里面的 hard link 地址,然后在引用依赖的时候则是通过 symlink 去找到对应虚拟磁盘目录下(.pnpm 目录)的依赖地址,当安装软件包时, 其包含的所有文件都会硬链接自此位置,而不会占用 额外的硬盘空间,从而大大节省了磁盘空间。
- 避免幽灵依赖,解释起来很简单,在我们的项目中就算某个包没有被安装,也就是 package.json 中并没有,但是我们却能够引用到这个包。防止其中一个依赖发生变化导致全局出错,依赖提升的安全问题
补充:当 npm i xx 的时候,发生了什么?
- 在 node_modules/.bin/ 目录中创建依赖的可执行文件
- 下载 package.json 中对应版本的 tar 包到本地
- 将依赖解压到本地缓存
- 将依赖从缓存拷贝到 node_modules 下对应的目录,并且将该目录软链接到 ./node_modules/.bin 目录下
至于用法
基本上跟npm、yarn类似,只是稍微要注意一下node版本的切换。