nodejs常见面试题:npm、 yarn 和 pnpm 的区别?

598人浏览 / 0人评论

npm、 yarn 和 pnpm 的区别

一、npm

npm 是 Node Package Manager 的缩写,顾名思义是一个 NodeJS 包管理和分发工具,我们可以使用它发布、安装和卸载 NodeJS 包。

npm 也是 Node.js 的默认的包管理器。一旦 node 安装,npm 也会被默认安装。

二、yarn

yarn 是 facebook 等公司在 npm v3 时推出的一个新的开源的包管理器,它的出现是为了弥补 npm 当时安装速度慢、依赖包版本不一致等问题。

yarn 有以下优点:

安装速度快

并行安装:npm 是按照队列依次安装每个 package,当前一个 package 安装完成之后,才能继续后面的安装。而 Yarn

是同步执行所有任务。

缓存:如果一个 package 之前已经安装过,yarn 会直接从缓存中获取,而不是重新下载。

版本统一

yarn 创新性的新增了 yarn.lock 文件,它是 yarn 在安装依赖包时,自动生成的一个文件,作用是记录 yarn 安装的每个 package 的版本,保证之后 install 时的版本一致。不过随着后来 npm 也新增了作用相同的 package-lock.json,这个优势已经不太明显。

三、pnpm

2017 年 pnpm 问世。它的全称是 Performance NPM,即高性能的 npm。相比较于 yarn,pnpm 在性能上又有了极大的提升。

pnpm 解决了 npm、yarn 重复文件过多、复用率低等问题。

我们知道,不管是 npm 还是 yarn,它们的安装方法都是将项目依赖包的原封不动的从服务器上下载到本地,写入到 node_modules 文件夹,而每个 package 又都有自己的 node_modules,所以当一个 package 在不同的依赖项中需要时,它会被多次复制粘贴并生成多份文件,形成一个很深的依赖树。

另外,如果同一个 package 在我们本地的多个项目中使用,每次安装的时候它都会被重新下载一次。比如我们本地有 100 个项目,都依赖 lodash,那么使用 npm 或 yarn 进行安装, lodash 很可能就被下载、安装了 100 次,也就是说我们的磁盘中有 100 个地方写入了 lodash 的代码,这种方式是极其低效的。

pnpm 内部使用基于内容寻址的文件系统来存储磁盘上所有的文件,这个文件系统出色的地方在于:

同一个包 pnpm 只会安装一次,磁盘中只有一个地方写入,后面再次使用都会直接使 hardlink。即使一个包的不同版本,pnpm 也会极大程度地复用之前版本的代码。举个例子,比如 lodash 有 100 个文件,更新版本之后多了一个文件,那么磁盘当中并不会重新写入 101 个文件,而是保留原来的 100 个文件的 hardlink,仅仅写入那一个新增的文件。

npm yarn 和 pnpm 之间命令的区别

- npm yarn pnpm

Install all npm install yarn pnpm install

Install npm install [package] yarn add [package] pnpm add [package]

-D npm install [package] -D yarn add [package] -D pnpm add -D [package]

-g npm install [package] -g yarn global add [package] pnpm add -g [package]

Uninstall npm uninstall [package] yarn remove [package] pnpm remove [package]

Update npm update [package] yarn upgrade [package] pnpm update [package]

这篇文章给大家分享一个业内一款出色的包管理器——pnpm。目前 GitHub 已经有 star 9.8k,现在已经相对成熟且稳定了。它由 npm/yarn 衍生而来,但却解决了 npm/yarn 内部潜在的 bug,并且极大了地优化了性能,扩展了使用场景。

全部评论

晴天下起了小雨
2017-10-01 18:00
很喜欢,果断关注了
wjmyly7336064
2017-10-01 18:00
相当实用,赞美了
橘大佬
2017-10-01 18:00
就是有些细节再到位点就好了…