npm、yarn、pnpm之间的区别

server/2024/10/8 22:50:30/

文章目录

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

npmyarnpnpm_1">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.ppmy.cn/server/128958.html

相关文章

论医疗类系统全国运营推广策略

一、线上推广 搜索引擎优化(SEO)- 重点策略 持续更新网站内容,包括系统功能介绍、成功案例、行业新闻等,提高网站的权重和流量。进行搜索引擎优化(SEO),确定与医疗机构辅助系统相关的关键词&a…

[SQL] 数据定义语言

一 数据库操作 查询所有数据库: SHOW DATABASES; 使用某个数据库 USE 数据库名; 查询当前数据库: SELECT DATABASE(); 创建数据库 对于[]内的可以省略,因为数据库有默认的对应的执行操作。实例:create database if not exists vretc default cha…

加密与安全_HOTP一次性密码生成算法

文章目录 HOTP 的基础原理HOTP 的工作流程HOTP 的应用场景HOTP 的安全性安全性增强措施Code生成HOTP可配置项校验HOTP可拓展功能计数器(counter)计数器在客户端和服务端的作用计数器的同步机制客户端和服务端中的计数器表现服务端如何处理计数器不同步计…

Ascend C 自定义算子开发:高效的算子实现

Ascend C 自定义算子开发:高效的算子实现 在 Ascend C 平台上,开发自定义算子能够充分发挥硬件的性能优势,帮助开发者针对不同的应用场景进行优化。本文将以 AddCustom 算子为例,介绍 Ascend C 中自定义算子的开发流程及关键技术…

Webstorm 中对 Node.js 后端项目进行断点调试

首先,肯定需要有一个启动服务器的命令脚本。 然后,写一个 debug 的配置: 然后,debug 模式 启动项目和 启动调试服务: 最后,发送请求,即可调试: 这几个关键按钮含义: 重启…

贪心算法专题(一)

目录 1、贪心算法简介 1.1 什么是贪心算法 1.2 贪心算法的特点 1.3 贪心算法的学习方向 2、算法应用【leetcode】 2.1 题一:柠檬水找零 2.1.1 算法原理 2.1.2 算法代码 2.2 题二:将数组和减半的最少操作次数 2.2.1 算法原理 2.2.2 算法代码 2…

DFT ATPG提升coverage的方法

以下是一些在DFT(Design for Testability,可测试性设计)ATPG(Automated Test Pattern Generation,自动测试向量生成)中提升覆盖率(coverage)的方法: 一、改进测试结构设计(DFT方面) 增加扫描链数量与优化扫描链结构 更多的扫描链可以并行地加载和移位测试数据,减少…

数据挖掘笔记part one (认识数据挖掘)

定义 从大量的,不完全的,有噪音的,模糊的,随机的数据中提取出存在潜在价值信息和知识的过程。 数据,信息,知识的关系 数据>信息>情报>知识>智慧(越小越精炼,越牛&…