npm、yarn、pnpm之间的区别

devtools/2024/10/11 5:08:32/

文章目录

  • 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/devtools/123998.html

相关文章

FreeRTOS——TCB任务控制块、任务句柄、任务栈详解

任务控制块结构体 任务控制块是 FreeRTOS 中用于描述和管理任务的数据结构,包含了任务的状态、优先级、堆栈等信息。 TCB_t的全称为Task Control Block,也就是任务控制块,这个结构体包含了一个任务所有的信息,它的定义以及相关变…

k8s的pod管理及优化

资源管理介绍 资源管理方式 命令式对象管理:直接用命令去操作kubernetes资源 命令式对象配置:通过命令配置和配置文件去操作kubernets资源 声明式对象配置:通过apply命令和配置文件去操作kubernets资源 命令式对象管理: 资源类…

集合(下)①

Map HashMap 和 Hashtable 的区别 HashMap 中带有初始容量的构造函数: 线程是否安全: HashMap 是非线程安全的,Hashtable 是线程安全的,因为 Hashtable 内部的方法基本都经过synchronized 修饰。(如果你要保证线程安全的话就使…

Vue+Flask

App.vue 首先要安装 npm install axios<template><div><h1>{{ message }}</h1><input v-model"name" placeholder"Enter your name" /><input v-model"age" placeholder"Enter your age" /><…

小猿口算脚本

实现原理&#xff1a;安卓adb截图传到电脑&#xff0c;然后用python裁剪获得两张数字图片&#xff0c;使用ddddocr识别数字&#xff0c;比较大小&#xff0c;再用adb命令模拟安卓手势实现>< import os import ddddocr from time import sleep from PIL import Imagedef …

SafeLine - 雷池 - 不让黑客越过半步

&#x1f44b; 项目介绍 SafeLine&#xff0c;中文名 “雷池”&#xff0c;是一款简单好用, 效果突出的 Web 应用防火墙(WAF)&#xff0c;可以保护 Web 服务不受黑客攻击。 雷池通过过滤和监控 Web 应用与互联网之间的 HTTP 流量来保护 Web 服务。可以保护 Web 服务免受 SQL …

掌握未来技能:亚马逊云科技推出生成式 AI 认证计划!

目录 前言 生成式 AI 的力量 1. 内容创造的无限可能 2. 数据增强和个性化 3. 提高生产力 4. 教育和研究的辅助工具 5. 突破语言障碍 关于亚马逊云科技生成式 AI 认证 1. 认证目标 2. 认证内容 3. 认证优势 如何获得认证 1. 在线学习 2. 实践考试 3.AWS Certifie…

mysql对某个数据库的所有表做精准的行数查询,做主从数据库比对

SQL语句 select concat(select ", TABLE_name, ", count(*) from , TABLE_SCHEMA, .,TABLE_name, union all ) from information_schema.tables where TABLE_SCHEMA in (Data_1);UNION 操作符用于合并两个或多个 SELECT 语句的结果集 执行之后去掉最有一条sql 的un…