npm、pnpm、yarn 哪个更好用?

对比 npm、pnpm、tnpm、yarn 优缺点 要对比,核心差异集中在。 阅读详情

你好,我是坚持分享干货的 EarlGrey,翻译出版过《Python编程无师自通》、《Python并行计算手册》等技术书籍。

如果我的分享对你有帮助,请关注我,一起向上进击。

创作不易,希望大家给一点鼓励,把公众号设置为“星标”,给文章点个“赞”和“在看”,谢谢大家啦~

b51ccd0583dc88052ddb5e9f0016a313.png

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

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

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

npm

a3a4777acc129d77fa148bcb0efa39f7.png

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

ad505ffe6106bb34839ef9be9698dd89.png

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

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

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

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

特点

pnpm的主要特点有:

高效节省

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

版本一致

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

硬链接安装

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

3.2 使用实例

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

yarn

4f61fc6a7f6ec13fbe5e9cf5ff0d1807.png

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的模块系统进行一些修改和适配。

4.2 使用实例

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

比较

安装速度

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

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

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

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

6883e48294207f23a25d72a4c0095a04.png

pnpm 的性能优势十分明显。

磁盘空间占用

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

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

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

并发安装

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

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

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

稳定性

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

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

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

哪个更好?

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

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

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

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

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

小结

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

至于用什么,看我们个人喜好。然后有一点,最好不要混用,不然会有未知的错误,至少我在单一的情况只用一种来管理还是没有遇到啥错误的。

总结可能不是很全,如果不周到或大家有更好的见解可以补充一下哈~

- EOF -

文章已经看到这了,别忘了在右下角点个“赞”和“在看”鼓励哦~

推荐阅读  点击标题可跳转

1、VS Code 变身小霸王游戏机!

2、认知升级:模型与范式转换

3、超赞的 Python 编译器,单核提速100倍

4、高效的终极秘诀

5、Python 3.12 版本有什么变化?

回复下方「关键词」,获取优质资源

回复关键词「 pybook03」,领取进击的Grey与小伙伴一起翻译的《Think Python 2e》电子版

回复关键词「书单02」,领取进击的Grey整理的 10 本 Python 入门书的电子版

👇关注我的公众号👇

告诉你更多细节干货

7cee2e5822101bcc69088668989ec1ca.jpeg

欢迎围观我的朋友圈

👆每天更新所想所悟

GradNorm:Gradient Normalization for Adaptive Loss Balancing in Deep Multitask Networks,梯度归一化 文章目录引言gradnorm   gradnorm论文地址:https://arxiv.org/abs/1711.02257   gradnorm是一种优化方法,在多任务学习(Multi-Task Learning)中,解决 1. 不同任务loss梯度的量级(magnitude)不同,造成有的task在梯度反向传播中占主导地位,模型过分学习该任务而忽视其它任务;2. 不同任务收敛速度不一致;这两个... 阅读详情

相关推荐

arcgis导出自身相交数据

今天接到一个客户需求,一份面文件,里面有好多元素是两两相交甚至是三个相交的,现在要把这些重叠部分提取出来,并且把相交部分的原始要素的名称也保留在字段中,也就是说名称这个会有好多个名称字段,如果两个要素相交那就是前两个名称字段有值,后面的为空,如果是三个要素相交,那么输出的这个要素就是前三个名称字段有值,后面的为空,嗯,这里也不太确定会出现多少个名称字段,这个需要依照数据来定。 这是原始数据,...

miaowumi92的博客 6787

包管理工具那么多,怎么选?npm、yarn 和 pnpm 三者比较及使用详解!

NPM(Node Package Manager)是 Node.js 默认的包管理器,它是世界上最大的软件注册表之一,有超过 100 万个包(package)可供下载使用。NPM 可以让开发者轻松地分享、安装和管理 Node.js 中的代码包和依赖项,它是构建现代 JavaScript 应用程序的关键组件之一。除了作为 Node.js 的包管理器之外,NPM 也可以用于前端开发。在前端开发中,NPM 主要用于安装、管理和更新前端项目的各种依赖包,例如 Vue、React、Angular 等常用框架。

蜗牛的博客 1万+

C# 开发 WPS 插件实战:从环境搭建到功能实现(附完整代码)

本文提供了一份详尽的C#开发WPS插件实战指南,涵盖从环境搭建到功能实现的完整流程。通过COM技术,开发者可以创建自定义插件,为WPS Office扩展自动化功能,如文档处理与格式转换。文章包含核心概念解析、Ribbon界面集成、调试部署方法及完整代码示例,帮助开发者快速上手。

rust6ferris的博客 927

pnpm、npm、yarn是什么?怎么选择?

pnpm、npm、yarn三者是前端常用的包管理器,那么他们有什么区别呢?

青玉白露的博客 2758

Prometheus-2.53.1安装

Prometheus+Grafana安装

qlj062127的博客 1787

ADRV9026初始化避坑指南:手把手调试PostMcsInit常见故障

本文详细解析了ADRV9026多片同步初始化过程中的PostMcsInit常见故障,包括时钟校准失败、JESD链路建立问题和ARM核通信异常等。通过实际项目经验,提供了硬件检查清单、软件配置要点和分层诊断方法,帮助工程师快速定位和解决问题,提升系统稳定性。

hadoop5ranger的博客 620

npm、yarn、pnpm哪个更好,怎么选择?

特性npmYarnpnpm安装速度中等快快磁盘空间较大较大小默认工具是否否锁定文件yarn.lock确定性中等高高社区和支持最大大较大综上所述,个人推荐还是使用 pnpm,pnpm不仅速度快,占用空间小,而且对npm也有一定的兼容性。

weixin_42097259的博客 979

从零到一:Firefly-RK3399上的Ubuntu镜像构建与GPU加速实战

本文详细介绍了在Firefly-RK3399开发板上从零构建深度优化的Ubuntu系统镜像的全过程,包括交叉编译环境配置、内核定制、GPU加速环境部署(Mesa Panfrost驱动、OpenCL/Vulkan支持)以及深度学习推理优化(TFLite + LinuxNN)。通过实战案例展示了如何充分发挥Mali-T860 GPU的硬件潜力,提升边缘AI应用的性能和能效。

pz8901234的博客 1019

前置(2): npm、yarn 、pnpm推荐用那个啊

如果你需要一种无需额外配置就能直接使用的、有着广泛支持和稳定性的包管理器,选择npm。如果你的项目需要更快的依赖管理和更严格的依赖控制,尤其是在并行下载和安装时,选择yarn。如果你的环境中有多个项目共享大量依赖,且你希望优化存储空间,选择pnpm。最终的选择应基于项目具体需求和团队的技术栈偏好。在现实中,很多团队基于历史项目和开发者的熟悉程度来选择工具,所以了解团队的工作流和依赖管理需求也很重要。

weixin_43719925的博客 624

手机拍照对焦快准狠的秘密:一文看懂PDAF、Dual Pixel和Super PD的区别

本文深入解析手机拍照中的三种主流相位检测自动对焦(PDAF)技术:Shield Pixel、Super PD和Dual Pixel。通过对比它们的原理、优缺点及实际表现,帮助读者理解不同技术的对焦速度、暗光表现和画质影响,从而做出更明智的购机选择。

weixin_26985923的博客 486

OSPF规划两大模型:双塔奇兵、犬牙交错

大家好,今天给大家带来的是OSPF规划两大模型:双塔奇兵、犬牙交错,让我们直接开始吧! OSPF规划之双塔奇兵 说明: OSPF 如果某个区域存在两个 ABR,并且在两个 ABR 上都对 area n 内的路由做了聚合操作。 最佳配置: 两台ABR之间的红线应该使用以太网的子接口技术,一个子接口属于area0,另一个属于 area n;或者该链路规划为 area n,同时配置虚连接; ABR 的 loopback0 规划入 area 0 OSPF 规划之犬牙交错 说明: 有时接入层的设备会以乱序的

网络技术联盟站 2423

为什么pnpm比npm、yarn使用更好

pnpm

楠姐的博客 893

从零实现深度学习框架【实现自己的PyTorch(已完结)】

本着“凡我不能创造的,我就不能理解”的思想,此系列文章会基于纯Python以及NumPy从零创建自己的深度学习框架,该框架类似PyTorch能实现自动求导。

日积月累,天道酬勤 6862

npm cnpm pnpm yarn 有什么区别? 哪个更好用呢?

npmcnpmpnpm和yarn都是流行的 JavaScript 包管理工具,它们在安装和管理 Node.js 项目的依赖方面有所不同。选择哪一个主要取决于你的项目需求和个人喜好。

多才多多 1107

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

npm、Yarn、pnpm、Bun 谁更好用?一文看懂前端包管理原理与对比

初学/通用项目→npm(生态最全,直接可用)大公司团队协作、注重一致性→Yarn Berry(PnP + 严格依赖)追求磁盘空间节省 & 安装速度→pnpm(硬链接省磁盘)实验性 / 极速启动→Bun PM(但生态相对小)Deno 生态→ 用deno的jsr。

wayne214的博客 1081

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

npm、yarn、pnpm三者的异同

这个表格将会说明一切:基于这些特点

梅山老妖的博客 521

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

npm、yarn、pnpm包安装器差异性对比

选择 npm:如果你已经习惯了 npm 或是你在维护现有的项目,并且不需要极致的性能优化,npm 是一个稳定的选择,特别是它是 Node.js 默认的包管理工具。选择 yarn:如果你希望有更快的安装速度,尤其是当你需要更好的缓存管理和并行安装时,yarn 是一个不错的选择。它在稳定性和性能方面都表现出色。选择 pnpm:如果你关注性能、磁盘空间优化,或者管理多个项目(Monorepo)时,pnpm 是最优选择。它的安装速度和资源使用效率非常高,特别适合大规模项目或需要依赖共享的场景

m0_56416159的博客 748

npm,yarn,pnpm包管理器的介绍

本文主要介绍的是常用的包管理器的具体一些简单命令和他们之间的对比

gaoqiandr的博客 307

pnpm相对于npm,yarn的优势

特性npmyarnpnpm磁盘占用高(重复)高(重复)低(全局 store + 链接)安装速度最慢较快最快(缓存 + 硬链接)幽灵依赖存在存在禁止,强依赖声明Monorepo 支持一般支持 (workspace)原生支持 (workspace)锁文件一致性npm5 之后改善良好更稳定趋势老牌曾经火逐渐成为主流。

Seveny07的博客 971

npm yarn pnpm 的区别

在 npm@3 版本之前,npm 使用的是依赖嵌套安装的方式,每个依赖性都有自己的 node_modules 文件夹,这导致了两个问题。需要注意的是,多个版本的包只有一个被提升到顶层,其余版本的包会被嵌套安装在各自的依赖中。pnpm 通过硬链接将锁定的版本与实际安装的依赖项关联起来,从而确保在不同的环境中和不同的构建之间使用相同的依赖版本。与此不同,pnpm 会创建一个隐藏的文件夹 .pnpm,以平铺的方式存储所有的包,通过包名和版本号来实现同一模块的不同版本之间的隔离和复用。

oi 588

node, nvm, npm,pnpm,以前简单的前端环境为什么越来越复杂

PNPM(Performant NPM)是一个快速的、节省磁盘空间的包管理工具,它是作为npm的替代品而设计的。与npm和Yarn等其他包管理工具相比,PNPM有几个独特的特性和优势。

猿脑2.0的博客 541

幽灵依赖是什么,pnpm出现的意义,使用pnpm创建一个vue3项目

幽灵依赖是什么,pnpm出现的意义,使用pnpm创建一个vue3项目,配置eslint,prettier,stylint

随便写写 6275

pnpm带来了什么

以上是A,B两个依赖使用pnpm安装后的 node_modules 结构,可以看到首先会去全局的store中查找A,B两个依赖是否存在,不存在则下载存入这个公共store, 然后对声明的A,B两个依赖通过软连接.pnpm文件夹下的各自依赖A,B,进行关联,而.pnpm则以平铺形式存储所有包,而真正包 则会硬链接形式链接到项目。寻找包的机制,如果 A 和 C 都依赖了 B,那么 A 和 C 在自己的 node_modules 中未找到依赖 C 的时候会向上寻找,并最终在与他们同级的。和文件资源进行关联。

大大黄的博客 2632

包管理器npm-yarn-pnpm的区别

纯属个人理解,如有错误或者批露欢迎指出! npm 目录结构:从纵向的树结构到扁平化结构改进 不确定性:版本号区间问题导致不同电脑下载的依赖版本可能不同,不确定性有可能导致,我的电脑没问题这样的问题出现。其后提供了对应的参数解决该问题,并使用了lock文件。 间接依赖问题。 依赖提升问题。 yarn 目录结构:扁平化 确定性:加了版本校验,确保版本不会出问题,同npm使用了lock文件。 加了离线安装的功能。npm提出后一直都没实现该功能。 pnpm 目录结构:树形结构,同package里面的依赖。nod.

junjiahuang的博客 247

npm、yarn、pnpm和cnpm优缺点

是 Node.js 的官方包管理工具,与 Node.js 集成紧密。拥有庞大的软件包生态系统,包含了许多开源模块。在安装大量软件包时,速度相对较慢。没有锁定版本的功能,可能导致版本冲突问题。

我的博客简介 1132

viet构建项目及<script setup>的用法

全局注册的自定义指令将以符合预期的方式工作,且本地注册的指令可以直接在模板中使用,就像上文所提及的组件一样。但这里有一个需要注意的限制:必须以 vNameOfDirective 的形式来命名本地自定义指令,以使得它们可以直接在模板中使用// 在元素上做些操作 } } < template > < h1 v-my-directive > This is a Heading const。

greed 1180
上一篇: 豆瓣高分,值得反复刷的 Python 经典好书
下一篇: 12 个绝佳的免费效率工具!
codingpy
博客等级 码龄11年 1867粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值