npm,yarn,pnpm

原理

npm、yarn和pnpm都是用于管理Node.js项目依赖的包管理工具,下面对它们进行详细讲解:

  1. npm(Node Package Manager):

    • npm是Node.js的默认包管理工具,也是最早被广泛使用的。
    • npm使用package.json文件来管理项目依赖,通过运行npm install命令来安装依赖包。
    • npm的安装速度相对较慢,需要先下载所有包的压缩文件,再解压和安装。
    • npm的缓存机制相对简单,会将下载的包缓存在本地缓存中,有时候可能会导致缓存占用较大的空间。
    • npm使用package-lock.json文件来锁定项目依赖的版本,保证在不同的环境中依赖版本的一致性。
    • npm将每个包安装在项目的node_modules目录下,可能会导致空间占用较大。
  2. yarn:

    • yarn是由Facebook开发的包管理工具,旨在解决npm的一些性能问题。
    • yarn也使用package.json文件来管理项目依赖,通过运行yarn install命令来安装依赖包。
    • yarn的安装速度相对较快,它使用并行安装的方式,可以同时下载和安装多个包。
    • yarn的缓存机制较为智能,会检查本地缓存中的包是否已经被其他项目使用,如果没有则会删除,从而减少缓存占用空间。
    • yarn使用yarn.lock文件来实现版本锁定的功能,与npm的package-lock.json类似。
    • yarn的包安装在全局缓存目录中,多个项目可以共享相同的包,因此空间占用较少。
  3. pnpm:

    • pnpm是另一款包管理工具,它与npm和yarn的不同之处在于它使用了硬链接的方式来安装包。
    • pnpm也使用package.json文件来管理项目依赖,通过运行pnpm install命令来安装依赖包。
    • pnpm的安装速度更快,它使用硬链接的方式将包安装到一个共享的存储位置,不会多次下载相同的包。
    • pnpm的缓存机制类似于npm,但使用硬链接存储包,所以在缓存占用方面比较节省空间。
    • pnpm使用pnpm-lock.yaml文件来实现版本锁定的功能。
    • pnpm也将包安装在共享的存储位置,所以空间占用较少。

总体来说,yarn和pnpm相对于npm来说,在安装速度和空间占用方面有一定的优势,而且在缓存和锁定机制上也更加智能和高效。选择使用哪个工具可以根据具体的项目需求和个人偏好进行选择。在新项目中,可以考虑使用yarn或pnpm来获得更好的性能和用户体验。

区别

npm,yarn和pnpm都是用于管理Node.js项目依赖的包管理工具,它们之间有一些区别,下面是它们的主要区别:

  1. 安装速度:

    • npm:在安装包时,npm会先下载所有包的压缩文件,然后再解压和安装,因此安装速度相对较慢。
    • yarn:yarn使用并行安装的方式,可以同时下载和安装多个包,因此安装速度相对较快。
    • pnpm:pnpm使用硬链接的方式,将包安装到一个共享的存储位置,不会多次下载相同的包,因此安装速度更快。
  2. 缓存机制:

    • npm:npm的缓存机制较为简单,会将下载的包缓存在本地缓存中,但有时候可能会导致缓存占用较大的空间。
    • yarn:yarn的缓存机制更为智能,它会检查本地缓存中的包是否已经被其他项目使用,如果没有则会删除,从而减少缓存占用空间。
    • pnpm:pnpm使用了类似npm的缓存机制,但它使用硬链接方式存储包,所以在缓存占用方面比较节省空间。
  3. 锁定机制:

    • npm:npm使用package-lock.json文件来锁定项目依赖的版本,保证在不同的环境中依赖版本的一致性。
    • yarn:yarn使用yarn.lock文件来实现版本锁定的功能,与npm的package-lock.json类似。
    • pnpm:pnpm也有类似的锁定机制,但它将锁定信息存储在一个独立的文件中,名为pnpm-lock.yaml。
  4. 空间占用:

    • npm:npm会将每个包安装在项目的node_modules目录下,因此在多个项目中可能会存在多个相同的包,导致空间占用较大。
    • yarn:yarn的包安装在全局缓存目录中,多个项目可以共享相同的包,因此空间占用较少。
    • pnpm:pnpm使用硬链接的方式,将包安装到一个共享的存储位置,所以在空间占用方面也比较节省。

总体来说,yarn和pnpm相对于npm来说,在安装速度和空间占用方面有一定的优势,而且在缓存和锁定机制上也更加智能和高效。选择使用哪个工具可以根据具体的项目需求和个人偏好进行选择。

pnpm为什么安装速度快

pnpm之所以安装速度快,主要有以下几个原因:

  1. 共享依赖: pnpm采用了类似硬链接的技术,将相同的依赖包安装到共享的存储空间中。这样,当多个项目都依赖同一个包时,实际上只需要在磁盘上保存一份该包的内容,减少了重复的下载和存储开销。

  2. 符号链接: pnpm使用符号链接技术,而不是像npm和yarn那样将依赖包完全复制到每个项目的node_modules目录中。符号链接可以在不复制文件的情况下,让不同的文件路径引用同一个实际文件,从而节省了磁盘空间和文件复制时间。

  3. 并行安装: pnpm支持并行安装依赖包,即同时下载多个依赖包,而不是像npm那样一个一个地下载。这样可以显著提高安装速度,尤其是在大型项目中或者网络较慢的情况下。

  4. 版本嵌套: pnpm支持版本嵌套,即在同一个项目中可以同时使用不同版本的依赖包。这样可以避免版本冲突和冗余的依赖安装。

  5. 缓存: pnpm使用了本地缓存,可以将下载过的依赖包保存在本地,下次再安装相同的依赖包时,就可以直接从缓存中读取,节省了下载时间。

总的来说,pnpm通过共享依赖、符号链接、并行安装等一系列优化措施,大大提高了依赖包的安装速度,特别是在多个项目共享依赖包的场景下,安装速度更加明显。同时,pnpm还保持了和npm一样的命令和功能,对现有的npm生态也有良好的兼容性。

软链接与硬链接区别

软链接(Symbolic Link,也称为符号链接)和硬链接(Hard Link)是两种不同的文件链接方式,它们在文件系统中的表现和使用上有一些区别:

  1. 定义:

    • 软链接:软链接是一个特殊的文件,它包含了指向另一个文件或目录的路径。软链接本身类似于一个快捷方式,通过软链接可以跨越文件系统边界链接文件或目录。
    • 硬链接:硬链接是文件系统中的多个文件条目指向同一个数据块的链接。这意味着多个硬链接实际上是同一个文件的不同名字,它们共享相同的数据内容。
  2. 跨文件系统:

    • 软链接:软链接可以跨越文件系统边界,可以链接到不同分区或不同设备的文件或目录。
    • 硬链接:硬链接不能跨越文件系统边界,必须在同一个文件系统内创建。
  3. 大小:

    • 软链接:软链接本身是一个很小的文件,它只包含了指向目标文件或目录的路径名。
    • 硬链接:硬链接没有额外的文件,它们与目标文件共享相同的数据块,因此没有额外的空间开销。
  4. 删除目标文件:

    • 软链接:如果目标文件被删除或移动,软链接将失效,指向一个不存在的目标。
    • 硬链接:如果目标文件被删除或移动,硬链接仍然存在且可以继续访问目标文件的内容,只有当所有的硬链接都被删除后,目标文件的数据块才会被释放。
  5. 使用场景:

    • 软链接:适用于需要跨文件系统链接的场景,或者需要创建一个指向目标文件或目录的快捷方式。
    • 硬链接:适用于在同一个文件系统内创建多个文件名指向相同数据块的场景,可以节省磁盘空间。

需要注意的是,不同操作系统对软链接和硬链接的支持可能有所不同。在Windows系统中,软链接称为符号链接,而在Linux和macOS等系统中都通常称为软链接。硬链接在Windows系统中的支持相对较少,主要在类Unix系统中使用较多。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/20432.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【多模态】21、BARON | 通过引入大量 regions 来提升模型开放词汇目标检测能力(CVPR2021)

文章目录 一、背景二、方法2.1 主要过程2.2 Forming Bag of Regions2.3 Representing Bag of Regions2.4 Aligning bag of regions 三、效果 论文:Aligning Bag of Regions for Open-Vocabulary Object Detection 代码:https://github.com/wusize/ovdet…

pytorch(续周报(1))

文章目录 2.1 张量2.1.1 简介2.1.2 创建tensor2.1.3 张量的操作2.1.4 广播机制 2.2 自动求导Autograd简介2.2.1 梯度 2.3 并行计算简介2.3.1 为什么要做并行计算2.3.2 为什么需要CUDA2.3.3 常见的并行的方法:网络结构分布到不同的设备中(Network partitioning)同一层…

微服务系列<3>---微服务的调用组件 rpc 远程调用

什么是rpc调用,让我们调用远程方法就像调用本地方法一样 这就属于rpc调用 rpc是针对于本地来说的 调用远程方法根调用本地方法一样 如果能达到这种效果 就是rpc调用如果达到一种效果 调用远程和调用本地一样 他就是一种rpc框架2个微服务 之间发的调用 我们之前通过ribbon的方式…

springboot访问请求404的原因

是记录,可能出现错误 可能出现的原因 1.你请求的URL路径不对,比如说你请求的路径是/usr/list,GET方法,但是你UserController上面的RequestMapping是这个样子:RequestMapping(“user”),有可能哈 2.前端的请求时GET方法,后端对应的处理函数的方…

【Linux命令200例】whereis用于搜索以及定位二进制文件

🏆作者简介,黑夜开发者,全栈领域新星创作者✌,阿里云社区专家博主,2023年6月csdn上海赛道top4。 🏆本文已收录于专栏:Linux命令大全。 🏆本专栏我们会通过具体的系统的命令讲解加上鲜…

IDA+Frida分析CTF样本和Frid源码和objection模块

文章目录 一些资料IDA调试命令IDA调试安卓的10个技巧objection基本使用 Wallbreaker1frida源码阅读之frida-java 第一个实例EasyJNI第二个实例objection资料 art_trace2.pyart_trace2.js IDAFrida分析CTF样本和Frid源码和objection模块 一些资料 IDA调试命令 adb devices adb…

C#设计模式之---抽象工厂模式

抽象工厂模式(Abstract Factory) 抽象工厂模式(Abstract Factory Pattern)是一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。工厂方…

Python 批量处理JSON文件,替换某个值

Python 批量处理JSON文件,替换某个值 直接上代码,替换key TranCode的值 New 为 Update。输出 cancel忽略 import json import os import iopath D:\\Asics\\850\\202307 # old path2 D:\\test2 # new dirs os.listdir(path) num_flag 0 for file…

Python3 高级教程 | Python3 正则表达式(一)

目录 一、Python3 正则表达式 (一)re.match函数 (二)re.search方法 (三)re.match与re.search的区别 二、检索和替换 (一)repl 参数是一个函数 (二)comp…

C++ 矩形切割

【问题描述】 小明有一些矩形的材料,他要从这些矩形材料中切割出一些正方形。 当他面对一块矩形材料时,他总是从中间切割一刀,切出一块最大的正方 形,剩下一块矩形,然后再切割剩下的矩形材料,直到全部切为正…

Curve深陷安全事件,OKLink如何破局

出品|欧科云链研究院 作者|Matthew Lee 7月31号,Curve 在平台表示 Vyper 0.2.15 的稳定币池由于编译器的漏洞所以遭到攻击。具体因为重入锁功能的失效,所以黑客可以轻易发动重入攻击,即允许攻击者在单次交易中执行某…

二、搜索与图论6:Dijkstra 模板题+算法模板(Dijkstra求最短路 I, Dijkstra求最短路 II,1003 Emergency)

文章目录 算法模板Dijkstra题目代码模板朴素dijkstra算法堆优化版dijkstra 树与图的存储(1) 邻接矩阵:(2) 邻接表:关于e[],ne[],h[]的理解 关于堆的原理与操作 模板题Dijkstra求最短路 I原题链接题目思路题解 Dijkstra求最短路 II原题链接题目思路题解 1…

05|Oracle学习(UNIQUE约束)

1. UNIQUE约束介绍 也叫:唯一键约束,用于限定数据表中字段值的唯一性。 1.1 UNIQUE和primary key区别: 主键/联合主键每张表中只有一个。UNIQUE约束可以在一张表中,多个字段中存在。例如:学生的电话、身份证号都是…

AWS——01篇(AWS入门 以及 AWS之EC2实例及简单实用)

AWS——01篇(AWS入门 以及 AWS之EC2实例及简单实用) 1. 前言2. 创建AWS账户3. EC23.1 启动 EC2 新实例3.1.1 入口3.1.2 设置名称 选择服务3.1.3 创建密钥对3.1.4 网络设置——安全组3.1.4.1 初始设置3.1.4.2 添加安全组规则(开放新端口&…

ELKELFK 日志分析系统

目录 一、ELK 概述 二、为什么要使用 ELK 三、完整日志系统基本特征 四、ELK 的工作原理: 五、ELK Elasticsearch 集群部署(在Node1、Node2节点上操作) 1.环境准备 2.部署 Elasticsearch 软件 3.安装 …

尝试多数据表 sqlite

C 唯一值得骄傲的地方就是 通过指针来回寻址 😂 提高使用的灵活性 小脚本buff 加成

Windows用户如何将cpolar内网穿透配置成后台服务,并开机自启动?

Windows用户如何将cpolar内网穿透配置成后台服务,并开机自启动? 文章目录 Windows用户如何将cpolar内网穿透配置成后台服务,并开机自启动?前置准备:VS Code下载后,默认安装即可VS CODE切换成中文语言 1. 将…

uni-app选择器( uni-data-picker)选择任意级别

背景说明 uni-app 官方的插件市场有数据驱动选择器,可以用作多级分类的场景。引入插件后,发现做不到只选择年级,不选择班级(似乎,只能到最后子节点了)。 需求中,有可能选择的不是叶子。比如&a…

适应于Linux系统的三种安装包格式 .tar.gz、.deb、rpm

deb、rpm、tar.gz三种Linux软件包的区别 rpm包-在红帽LINUX、SUSE、Fedora可以直接进行安装,但在Ubuntu中却无法识别; deb包-是Ubuntu的专利,在Ubuntu中双击deb包就可以进入自动安装进程; tar.gz包-在所有的Linux版本中都能使用…

Host/ KVM/ Docker/ K8s/ OpenStack/ Mesos简单介绍和区别

Host/ KVM/ Docker/ Kubernetes/ OpenStack 和 Mesos 的简单介绍: - Host: Host 是指物理服务器或虚拟机主机,它们可以运行多个虚拟机或容器来提供计算和存储资源。Host 是云计算和容器化技术中的基本组成部分。 - KVM: KVM 是…