npm、pnpm和yarn 的区别

news2024/11/15 4:07:36

包管理工具是JavaScript开发中不可或缺的一部分,它们可以帮助我们方便地安装、更新、删除和管理项目所依赖的各种库和模块。

目前,最流行的包管理工具有npm、yarn和pnpm,它们各有各的特点和优劣势。

本文将试着对这三个工具进行全面的对比。

npm

npm是Node.js的官方包管理工具,它于2010年随着Node.js一起发布,是最早的JavaScript包管理工具之一。

npm的目标是提供一个简单、可靠、高效的方式来管理Node.js项目的依赖关系。npm围绕着语义版本控制(semver)的思想而设计,通过一个名为package.json的文件来记录项目的元数据和依赖项。npm还提供了一个名为npm registry的在线服务,用于存储和分发公开或私有的包。

特点

npm的主要特点有:

官方支持

npm是Node.js的官方包管理工具,它与Node.js的版本和特性紧密地配合,同时也得到了Node.js社区的广泛支持和贡献。

丰富的生态

npm拥有超过160万个公开的包,覆盖了JavaScript开发的各个方面,是目前最大的包仓库之一。npm还提供了一些其他的服务,如npm audit、npm ci、npm run等,以增强开发者的体验和安全性。

简单易用

npm的使用非常简单,只需要几个基本的命令,如npm init、npm install、npm update等,就可以完成项目的初始化、安装、更新等操作。npm的文档也非常完善,提供了详细的指南和参考。

使用实例

# 在项目中安装依赖项
npm install lodash
# 全局安装包
npm install -g create-react-app
# 查看已安装的包
npm list
# 清空缓存
npm cache clean

pnpm

pnpm是由Zoltan Kochan开发的一个新的包管理工具,它于2016年11月发布,但并没有像yarn那样迅速流行起来。

pnpm的主要目标是解决npm和yarn的扁平化安装方式带来的重复和幽灵依赖的问题,即同名的包只会提升一个版本的,其余的版本依然会复制多次,而且某些依赖项可能会被意外地提升或缺失。

pnpm通过引入一个名为store的全局缓存目录来存储所有安装过的包,然后通过硬链接和软链接的方式来组织node_modules目录,确保每个包都能访问到自己的依赖项,而不会访问到其他包的依赖项。

这样可以既保证依赖项的版本一致性,又节省磁盘空间和安装时间。

特点

pnpm的主要特点有:

高效节省

pnpm通过引入一个名为store的全局缓存目录来存储所有安装过的包,然后通过硬链接和软链接的方式来组织node_modules目录,确保每个包都能访问到自己的依赖项,而不会访问到其他包的依赖项。这样可以既保证依赖项的版本一致性,又节省磁盘空间和安装时间。

版本一致

pnpm通过引入一个名为pnpm-lock.yaml的文件来锁定依赖项的版本和内容,确保每次安装都能得到相同的结果,避免了因为依赖项的变化而导致的错误和不一致。

硬链接安装

pnpm通过使用硬链接的方式来安装依赖项,而不是复制文件,这样可以避免重复的依赖项和文件路径长度的问题,而且可以提升安装的速度和稳定性。

使用实例

# 在项目中安装依赖项
pnpm add lodash
# 全局安装包
pnpm add -g create-react-app
# 查看已安装的包
pnpm list
# 清空缓存
pnpm cache clean

yarn

yarn是由Facebook、Google、Expo等公司联合开发的一个新的包管理工具,它于2016年10月发布,迅速受到了开发者的欢迎。

yarn的主要目标是解决npm安装的不确定性问题,即不同的开发者可能会安装同一个项目的不同版本的依赖项,导致难以调试的错误。yarn通过引入一个名为yarn.lock的文件来锁定依赖项的版本和内容,确保每次安装都能得到相同的结果。

yarn还通过并行化、缓存、离线等技术来提升安装的速度和稳定性。

特点

yarn的主要特点有:

快速稳定

yarn通过并行化、缓存、离线等技术来提升安装的速度和稳定性,它可以在几秒钟内完成大型项目的安装,而且不会因为网络或其他因素而失败。

可预测

yarn通过引入yarn.lock文件来锁定依赖项的版本和内容,确保每次安装都能得到相同的结果,避免了因为依赖项的变化而导致的错误和不一致。

灵活创新

yarn通过引入Plug’n’Play模式来摒弃node_modules目录,而是通过一个名为.pnp.js的文件来管理依赖项的解析和加载,这样可以进一步节省磁盘空间和安装时间,但也需要对Node.js的模块系统进行一些修改和适配。

使用实例

# 在项目中安装依赖项
yarn add lodash
# 全局安装包
yarn global add create-react-app
# 查看已安装的包
yarn list
# 清空缓存
yarn cache clean

比较

安装速度

  • npm: 相对较慢,特别是在有大量依赖项的项目中。

  • pnpm: 安装速度较快,尤其在多项目工作区中。

  • yarn: 使用并行下载,速度相对较快。

下面是三个工具执行不同命令的性能对比:

pnpm 的性能优势十分明显。

磁盘空间占用

  • npm: 默认将依赖项复制到项目的node_modules目录,可能导致重复占用磁盘空间。

  • pnpm: 通过符号链接共享依赖项,减少了磁盘空间占用。

  • yarn: 在离线模式下,通过缓存机制减少了磁盘空间占用

并发安装

  • npm: 不支持并发安装,会一个一个地安装依赖项。

  • pnpm: 支持并发安装,提高了安装速度。

  • yarn: 使用并行下载,速度相对较快。

稳定性

  • npm: 稳定、成熟,广泛使用。

  • pnpm: 相对较新,但社区正在不断发展。

  • yarn: 由Facebook维护,稳定性较高。

哪个更好?

不同的工具有不同的优劣势,适合不同的开发场景和需求。

你可以根据你的项目的特点和目标,以及你对速度、稳定性、兼容性、创新性等方面的偏好,来选择最适合你的工具。

  • 如果你注重生态系统的完备性,选择npm;

  • 如果你追求更快的安装速度和较小的磁盘占用,选择pnpm;

  • 如果你需要离线模式和确保包版本一致性,选择yarn。

小结

npm是默认选择,稳定且易于使用。pnpm通过共享依赖项减少磁盘空间占用,适用于需要优化空间的项目。yarn通过并行下载和版本锁定提供了更快、更可靠的安装。

至于用什么,看我们个人喜好。然后有一点,最好不要混用,不然会有未知的错误。

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

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

相关文章

新电脑究竟要不要登录微软账户?看这个就明白了

记得Windows11出来之后,新电脑预装的系统开机之后就会强制用户登录微软账户,不然就没法进入下一步。 如果你在重装了Windows10系统之后,到了联网步骤时连接上了网络,那么也会强制你登录微软账户,而不是创建本地账户&am…

Spring Data JPA从入门到精通--对查询结果的扩展

如果 我们想仅仅返回实体中的几个字段,应该怎么做呢? 基于projections的思路,其实是比较容易的。 我们只需要声明一个 接口,包含要返回的属性的方法即可,例如: Repository里面的写法如下,直接…

面向对象编程(高级)

面向对象编程(高级) 1、类变量和类方法 (1) 概念 类变量,也称为静态变量,是指在类级别声明的变量。它们与特定类相关联,而不是与类的实例(对象)相关联。每个类变量只有…

jmeter的安装与目录介绍

1、启动 apache-jmeter-5.0\bin 2、永久修改中文配置 zh-CN就行了

Docker与虚拟机的比对

在Windows操作系统上的对比: 但是官方还是建议我们尽量不要将Docker直接安装到Windows操作系统上。

单机多进程,每个进程多张卡 mpi nccl 程序设计检验

做了部分注释&#xff0c;比较乱 本示例结构&#xff1a; 1&#xff0c;源代码 #include <stdlib.h> #include <stdio.h> #include "cuda_runtime.h" #include "nccl.h" #include "mpi.h" #include <unistd.h> #include <…

MySQL的基础架构之内部执行过程

MySQL的逻辑架构图 如上图所示&#xff0c;MySQL可以分为Server层和存储引擎层两部分&#xff1a; 1&#xff09;Server层涵盖了MySQL的大多数核心服务功能&#xff0c;以及所有的内置函数&#xff08;如日期、时间、数学和加密函数等&#xff09;&#xff0c;所有跨存储引擎…

Javaweb之Mybatis的基础操作的详细解析

1. Mybatis基础操作 学习完mybatis入门后&#xff0c;我们继续学习mybatis基础操作。 1.1 需求 需求说明 通过分析以上的页面原型和需求&#xff0c;我们确定了功能列表&#xff1a; 查询 根据主键ID查询 条件查询 新增 更新 删除 根据主键ID删除 根据主键ID批量删除 …

腾讯云轻量应用服务器详细介绍_2024年更新

腾讯云轻量应用服务器开箱即用、运维简单的轻量级云服务器&#xff0c;CPU内存带宽配置高并且价格特别便宜&#xff0c;大带宽&#xff0c;但是限制月流量。轻量2核2G3M带宽62元一年、2核2G4M优惠价118元一年&#xff0c;540元三年、2核4G5M带宽218元一年&#xff0c;756元3年、…

数据库应用课程学生表、课程表、选课表mysql语句实战练习

1、创建表结构 目录 1、创建表结构 1.1 创建学生表 1.2 创建课程表 1.3创建选课表 1.4 插入学生表 1.5 插入课程表 1.6 插入选课表 2.以下布置操作是根据以上建立的三张表格基础上进行mysql语句的练习 2.1 查询学生信息并添加入新表 2.1.1 查询全体学生的学号与姓名&#…

ECharts配置个性化图表:圆环、立体柱状图

官网调试地址&#xff1a;调试 效果图&#xff1a; 配置&#xff1a; option {color: [#29BEFF, #A2DC00, #FFC400, #FF7F5C, #CA99FC],// 提示窗tooltip: {trigger: item,show: false},// 图例legend: {top: 5%,left: center,show: false},// 数据series: [{name: Access …

23年中科院1区算法|开普勒优化算法原理及其利用(Matlab/Python)

CEC2017中的测试 本文作者将介绍一个2023年发表在中科院1区期刊《Knowledge -Based Systems》上的优化算法——开普勒优化算法(Kepler optimization algorithm&#xff0c;KOA)[1] 算法性能上&#xff0c;与鹈鹕、黏菌、灰狼和鲸鱼等一众优化算法在CEC2014、CEC2017、CEC2020和…

SRC中的一些信息收集姿势

目录 前言 搜索引擎 Google、bing、baidu Fofa、360q、鹰图 提炼图标 提炼标题 提炼Body 提炼特殊路由 提炼特殊服务 GIT提炼 总结 本文由掌控安全学院 - 杳若 投稿 前言 前前后后挖了四个月的EDUSRC&#xff0c;顺利从路人甲升到了网络安全专家&#xff0c;从提交…

技术扫盲:如何优雅的使用 java -jar

java -jar xxx.jar java -jar 是一个用于在命令行界面中执行 Java 可执行 JAR 文件的命令。它的语法如下&#xff1a; java -jar <JAR 文件路径> [参数]其中&#xff1a; java 是 Java 运行时环境的可执行文件。-jar 是一个选项&#xff0c;表示要执行的文件是一个 JA…

南昌本地人才招聘网站有哪些

南昌吉鹿力招聘网是一家南昌本地人才招聘网站&#xff0c;真正专属于年轻人的移动社交招聘平台&#xff0c;提供职业档案、人脉、求职、聊天等功能。主要优点是扩大招聘渠道&#xff0c;通过社区招聘平台找到工作机会&#xff0c;并为用户提供职业建议和职位发布等服务。 吉鹿…

技术资讯:Vue 3.4 新版本发布,1分钟快速看看改了啥!

大家好&#xff0c;我是大澈&#xff01; 本文约1000字&#xff0c;整篇阅读大约需要1分钟。 感谢关注微信公众号&#xff1a;“程序员大澈”&#xff0c;免费领取"面试礼包"一份&#xff0c;然后免费加入问答群&#xff0c;从此让解决问题的你不再孤单&#xff01…

【办公软件】修改U盘的默认盘符

在工作中我们可能会因为有一些大型软件设置了库文件路径&#xff08;如Z盘&#xff09;。在家办公时通过U盘的方式将库拷入在U盘中&#xff0c;但是到家里的电脑上&#xff0c;U盘插入后会默认一个盘符&#xff08;如E盘&#xff09;&#xff0c;那么应该怎么操作呢&#xff1f…

【HBase】——安装部署

1 规划&前提 Zookeeper 、HDFS 正常部署规划如下 2 解压并重命名 cd /opt/software/ tar -zxvf hbase-2.4.11-bin.tar.gz -C /opt/module/ cd /opt/module mv hbase-2.4.11/ hbase3 修改配置文件 3.1 hbase-env.sh #!/usr/bin/env bash # #/** # * Licensed to the Apa…

你可能不知道的5款好用封面设计工具,快来一探究竟吧!

我相信每个作者和出版商都希望在一部作品完成后有一个醒目的封面&#xff0c;这样潜在的读者就会有足够的好奇心拿起这本书&#xff0c;你的书的销量就会上升。这就是封面设计软件的使用&#xff0c;专业的封面设计软件可以增加前沿效果&#xff0c;呈现最适合书籍内容的创意布…

UniversalTransformer with Adaptive Computation Time(ACT)

原论文链接&#xff1a;https://arxiv.org/abs/1807.03819 Main code import torch import numpy as npclass PositionTimestepEmbedding(torch.nn.Module):def forward(self, x, t):device x.devicesequence_length x.size(1)d_model x.size(2)position_embedding np.arr…