包管理器pnpm,npm和yarn对比

npm

npm 是 Node.js 的官方包管理器,也是 JavaScript 生态系统中最受欢迎的包管理器之一。npm 具有许多强大的功能,例如自动依赖项解析和版本控制。但是,由于它是单线程解析依赖项,因此安装速度可能相对较慢。

npm3之前的版本,node_modules是嵌套的,如果多个包之间有公共依赖,同样的依赖会复制很多次,造成路径超长以及占据磁盘空间过大的问题。
npm3之后为了解决这个问题,使用了平铺的方式,所有包都平铺在一层node_modules。

yarn

yarn 是 Facebook 开发的包管理器,旨在解决 npm 的一些问题。yarn 通过并行下载和缓存来加快安装速度,并通过锁定文件确保安装过程中使用相同的依赖项版本。此外,yarn 还提供了一些其他功能,例如离线模式和更好的脚本执行。

yarn一开始就是依赖平铺的方式,但是也有少部分包还是有嵌套node_modules,是因为一个包可能有多个版本,提升只能提升一个,后面再遇到相同包的不同版本,依然还是用嵌套的方式。

平铺的方式会带来幽灵依赖的问题,那些没有声明在dependencies里的依赖,如果有依赖包使用到了,也会平铺到node_modules一层,这样在代码里可以引用。这样会带来一个问题,如果有一天依赖它的包不依赖它了,那么代码里也就无法使用这个包会报错。

pnpm

pnpm 是另一个 JavaScript 包管理器,它与 npm 和 yarn 相比有一些不同之处。pnpm 具有类似于 yarn 的速度和稳定性,但与 yarn 不同的是,它采用了一种不同的依赖项解析方法,即将依赖项安装在单个位置,并使用符号链接将它们链接到每个项目中。

pnpm将包都安装到了硬盘里的全局store中,将包硬链接到项目里的node_modules/.pnpm,包与包的依赖关系用软链接。所以比起npm和yarn复制文件的方式,这种软硬链接的方式安装包更快,且节省大量空间,也没有幽灵依赖的问题。

请我喝杯咖啡吧~

支付宝
微信