简单总结下npm,yarn和pnpm三种包管理器的区别
一 npm
1 简述
npm 是 Node Package Manager 的缩写,是一个 NodeJS 包管理和分发工具,我们可以使用它发布、安装和卸载 NodeJS 包。npm 是 JavaScript 运行时环境 Node.js 的默认包管理器。
2 官网
3 说明
npm2存在很严重的依赖嵌套关系
node_modules
- package-A
-- node_modules
--- package-B
----- node_modules
------ package-C
-------- some-really-really-really-long-file-name-in-package-c.js
npm3扁平依赖
node_modules
- package-A
-- node_modules
--- package-B
----- node_modules
------ package-C
-------- some-really-really-really-long-file-name-in-package-c.js
npm
必须首先遍历所有的项目依赖关系,然后再决定如何生成扁平的node_modules
目录结构。npm必须为所有使用到的模块构建一个完整的依赖关系树,这是一个耗时的操作,是npm安装速度慢的一个很重要的原因。本地缓存的内容可以通过npm cache ls
命令进行查看。本地缓存的设计有助于减少安装时间。
二 yarn
1 简述
yarn 是 facebook 等公司在 npm v3 时推出的一个新的开源的 Node Package Manager,它的出现是为了弥补 npm 当时安装速度慢、依赖包版本不一致等问题。
2 官网
3 说明
它的出现是为了弥补 npm 当时安装速度慢、依赖包版本不一致等问题。每个yarn安装都会生成一个类似于npm-shrinkwrap.json
的yarn.lock
文件,而且它是默认创建的。除了常规信息之外,yarn.lock
文件还包含要安装的内容的校验和,以确保使用的库的版本相同。yarn
无需互联网连接就能安装本地缓存的依赖项,它提供了离线模式。
yarn 有以下优点:
安装速度快
- 并行安装:npm 是按照队列依次安装每个 package,当前一个 package 安装完成之后,才能继续后面的安装。而 Yarn 是同步执行所有任务。
- 缓存:如果一个 package 之前已经安装过,yarn 会直接从缓存中获取,而不是重新下载。
版本统一
yarn 创新性的新增了 yarn.lock 文件,它是 yarn 在安装依赖包时,自动生成的一个文件,作用是记录 yarn 安装的每个 package 的版本,保证之后 install 时的版本一致。不过随着后来 npm 也新增了作用相同的 package-lock.json,这个优势已经不太明显。
三 pnpm
1 简述
2017 年 pnpm 推出。全称 Performance NPM,即高性能的 npm。
2 官网
3 说明
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] |
参考文档