什么是pnpm
pnpm 也是一个包管理工具,从功能上来说,与npm
和 yarn
是一样的,但是pnpm
作为后起之秀,解决了很多 npm
与 yarn
中的问题,非常优秀,效率非常的高
pnpm 的安装与基本用法
详细可以参照官网 此处只做最简单的描述
基本使用
# 全局安装
npm i pnpm -g
# 查看版本
pnpm -v
如何使用
基本和npm
的用法一致,只是把 npm
换成了pnpm
比如
# 安装
pnpm install xxx
# 卸载
pnpm uninstall xxx
pnpm 与 yarn npm 有啥区别
pnpm 效率更高
pnpm 第一次装一个包,可能不算太快,但是一旦安装成功就会计入缓存,最明显的一点就是,删除node_module
文件夹非常快,再次安装就直接用缓存了
下面我们以安装Vue
为例子
pnpm node_module 非常简洁依赖不打平
在npm
或者yarn
中,当我们安装一个库,比如 vue
这个库,在node_module
中把 vue
的包和vue
所依赖的包给全部平齐的放在node_module
中,所以导致node_module
中会有很多很多的包
看看npm
的表现如何,执行npm i vue
同样情况下,来看看pnpm
的表现
执行 pnpm i vue
pnpm中不能使用间接依赖
其实在上面的图中我们已经看到了,就是 npm
中的依赖是这样的
我只是得安装了Vue
,但是Vue
中又依赖了@vue/shared
在npm
的安装环境下,会把 Vue
的包与@vue/shared
的包一同安装在最外层,此时我在代码中 既可以使用 Vue
这个库,也可以直接使用@vue/shared
这个库(尽管我没有直接安装它)
但是同样的在pnpm
中,我的代码中只能使用Vue
这个库,而@vue/shared
这个库是没有办法使用的
这是两种机制,很显然pnpm
更合理,原因主要有两点
- 这样管理依赖更加的显式,也更加的明确,更容易管理。否则你都搞不清,因为我明明没有安装
B
这个包,为什么我可以用,可能是你的安装A
包中,就依赖了B
- 不易出错;比如某一天
A
包的作者在某一个小版本迭代中将B
包给去除了,而你重新安装了一下A
包,以前代码中引用B
包是可以运行,现在直接懵逼了,报错了,你就纳闷了,我明明都没有改代码,怎么突然就报错了,有没有感觉很绝望
节约磁盘空间的占用
npm
与yarn
使用缓存包的方式
- 当我们在项目A中第一次安装
vue
依赖包的时候 - 首先在项目A中下载一份
vue
的包 - 在缓存中下载一份
vue
的包 - 当在另外一个项目B中也要安装
vue
包 - 此时会在缓存中直接通过拷贝的形式把
vue
的安装包拷贝到项目B 中 - 那么此时,项目A,项目B,缓存中,都有一份
vue
安装包 - 金额承受就是,磁盘会被大量占用,而且拷贝的过程也比较耗费时间
pnpm
使用缓存包,运用符号链接和软连接的方式
针对上述的情况,我们看看pnpm
是如何做的
- 当我们在项目A中第一次安装
vue
依赖包的时候 - 直接在缓存中下载一份
vue
- 项目A中的
vue
通过一种类似于 *快捷方式的软连接去链接到 缓存中的Vue
- 那么再项目B中也安装
vue
的话,也是一样的,会直接通过链接的方式来指向缓存中的vue
包 - 这样做不需要拷贝包,全部在缓存中,节省了磁盘空间,另外不需要拷贝,也节省的安装包的时候