当前位置: 首页 > article >正文

npm、yarn、pnpm之间的区别

文章目录

  • npm、yarn、pnpm之间的区别
    • 一、引言
    • 二、安装速度
      • 1、第一步:速度对比
    • 三、磁盘空间利用
      • 2、第二步:磁盘空间利用
    • 四、依赖管理
      • 3、第三步:依赖管理方式
    • 五、安全性
      • 4、第四步:安全性对比
    • 六、日常使用
      • 5、第五步:日常使用对比
    • 七、总结

npm、yarn、pnpm之间的区别

一、引言

在JavaScript项目的依赖管理中,npmyarnpnpm是三个最常用的包管理工具。它们各自有其特点和优势,同时也存在一些差异。本文将从安装速度、磁盘空间利用、依赖管理、安全性和日常使用等方面对比这三种工具。

二、安装速度

1、第一步:速度对比

在安装速度方面,pnpm具有明显优势。根据苍青浪的文章,pnpm在大多数场景下,包安装的速度都明显优于npmyarn,速度会比npmyarn快2-3倍。

例如

# 使用npm安装React
npm install react
# 大概所需时间:30秒

# 使用yarn安装React
yarn add react
# 大概所需时间:25秒

# 使用pnpm安装React
pnpm add react
# 大概所需时间:10秒

三、磁盘空间利用

2、第二步:磁盘空间利用

pnpm在磁盘空间利用方面同样表现出色。它使用基于内容寻址的文件系统存储文件,避免了重复安装同一个包的问题。

例如

# 使用npm安装lodash
npm install lodash
# 磁盘空间占用:20MB

# 使用yarn安装lodash
yarn add lodash
# 磁盘空间占用:20MB

# 使用pnpm安装lodash
pnpm add lodash
# 磁盘空间占用:5MB(假设其他项目已经安装过lodash)

四、依赖管理

3、第三步:依赖管理方式

npmyarn采用扁平化的依赖管理方式,所有依赖都被放置在node_modules目录下。这种方式虽然解决了嵌套依赖的问题,但也带来了依赖结构的不确定性和非法访问依赖的风险。

例如

# 使用npm和yarn时,如果foo依赖bar,bar依赖baz
# foo
# ├── node_modules
# │   ├── bar
# │   └── baz(依赖提升)
# └── package.json

# 使用pnpm时,依赖不会提升
# foo
# ├── node_modules
# │   └── .pnpm
# │       └── foo@1.0.0
# │           └── node_modules
# │               ├── bar
# │               └── baz
# └── package.json

五、安全性

4、第四步:安全性对比

在安全性方面,pnpm通过其独特的依赖管理方式,确保了只有声明过的依赖才能被项目访问,从而避免了非法访问依赖的风险。

例如

# 使用npm或yarn时,如果项目A依赖项目B,项目B依赖项目C
# 项目A可以直接访问项目C,即使项目A没有直接依赖项目C

# 使用pnpm时,项目A不能直接访问项目C
# 项目A
# ├── node_modules
# │   ├── .pnpm
# │   │   └── project-b@1.0.0
# │   │       └── node_modules
# │   │           └── project-c
# │   └── project-b
# └── package.json

六、日常使用

5、第五步:日常使用对比

在日常使用方面,pnpm提供了与npmyarn相似的命令行接口,使得从npmyarn迁移到pnpm变得非常容易。

例如

# 使用npm安装依赖
npm install

# 使用yarn安装依赖
yarn install

# 使用pnpm安装依赖
pnpm install

七、总结

综上所述,pnpm在安装速度、磁盘空间利用、依赖管理和安全性方面都展现出了明显的优势。虽然npmyarn在社区中有着广泛的使用,但pnpm的创新和性能优化使其成为了一个值得考虑的选择。


版权声明:本博客内容为原创,转载请保留原文链接及作者信息。

参考文章

  • 为什么现在我更推荐 pnpm 而不是 npm/yarn?

http://www.kler.cn/news/334961.html

相关文章:

  • 构建数字化生态平台,开启企业新未来
  • 冯诺依曼体系|操作系统
  • 服务器租用与托管注意事项有哪些?
  • [Day 84] 區塊鏈與人工智能的聯動應用:理論、技術與實踐
  • 【包教包会】2D图片实现3D透视效果(支持3.x、支持原生、可合批)
  • ElasticSearch备考 -- Multi match
  • 代码随想录算法训练营第35天|1049.最后一块石头的重量II、494.目标和、474.一和零
  • 词嵌入(Word Embedding)之Word2Vec、GloVe、FastText
  • Hive数仓操作(十七)
  • 趣味SQL | 从围棋收官到秦楚大战的数据库SQL实现(下)
  • Linux高级编程_29_信号
  • 【NIO基础】NIO(非阻塞 I/O)和 IO(传统 I/O)的区别,以及 NIO 的三大组件详解
  • EXCEL_光标百分比
  • 计算机网络:物理层 —— 物理层下的传输媒体
  • 深入理解闭包【JavaScript】
  • 【百度文心智能体】想开发爆款智能体?来看看 万圣节之夜探秘者 智能体开发流程大揭秘
  • 东方仙盟——软件终端架构思维———未来之窗行业应用跨平台架构
  • IDEA使用技巧
  • 信息学奥赛复赛复习13-CSP-J2021-02插入排序-排序稳定性、插入排序、sort排序、结构体、计数排序
  • 大数据复习知识点6