npm、yarn、pnpm区别
npm
npm 是 Node Package Manager 的缩写,是一个 NodeJS 包管理和分发工具,我们可以使用它发布、安装和卸载 NodeJS 包。npm 是 JavaScript 运行时环境 Node.js 的默认包管理器。
yarn
yarn 是 facebook 等公司在 npm v3 时推出的一个新的开源的 Node Package Manager,它的出现是为了弥补 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] |
npm install [package] -D | yarn add [package] -D | pnpm add -D [package] | |
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] |
链接:https://www.jianshu.com/p/e02ffa9effe6