tangyuxian
文章79
标签37
分类5
node-npm,yarn和pnpm区别

node-npm,yarn和pnpm区别

简单总结下npm,yarn和pnpm三种包管理器的区别

一 npm

1 简述

npm 是 Node Package Manager 的缩写,是一个 NodeJS 包管理和分发工具,我们可以使用它发布、安装和卸载 NodeJS 包。npm 是 JavaScript 运行时环境 Node.js 的默认包管理器。

2 官网

https://www.npmjs.com/

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 官网

https://yarnpkg.com/

3 说明

它的出现是为了弥补 npm 当时安装速度慢、依赖包版本不一致等问题。每个yarn安装都会生成一个类似于npm-shrinkwrap.jsonyarn.lock文件,而且它是默认创建的。除了常规信息之外,yarn.lock文件还包含要安装的内容的校验和,以确保使用的库的版本相同。yarn无需互联网连接就能安装本地缓存的依赖项,它提供了离线模式。

yarn 有以下优点:

  1. 安装速度快

    • 并行安装:npm 是按照队列依次安装每个 package,当前一个 package 安装完成之后,才能继续后面的安装。而 Yarn 是同步执行所有任务。
    • 缓存:如果一个 package 之前已经安装过,yarn 会直接从缓存中获取,而不是重新下载。
  2. 版本统一

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

三 pnpm

1 简述

2017 年 pnpm 推出。全称 Performance NPM,即高性能的 npm。

2 官网

https://pnpm.io/

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]

参考文档

npm、 yarn 和 pnpm 的区别 - 简书 (jianshu.io)

一文看懂npm、yarn、pnpm之间的区别 - 掘金 (juejin.cn)

本文作者:tangyuxian
本文链接:https://www.tangyuxian.com/2022/06/05/%E5%89%8D%E7%AB%AF/node/node-npm-yarn%E5%92%8Cpnpm%E5%8C%BA%E5%88%AB/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可