当前位置: 首页 > news >正文

npm | Yarn | pnpm Node.js包管理器比较与安装

一、包管理器比较

参考原文链接:

2024 Node.js Package Manager 指南:npm、Yarn、pnpm 比较 — 2024 Node.js Package Manager Guide: npm, Yarn, pnpm Compared (nodesource.com)

以下是对 Node.js 的三个包管理工具 npm、Yarn 和 pnpm 的优缺点总结:

npm(Node Package Manager)

优点:

  1. 庞大的包仓库: npm 拥有超过两百万的包,覆盖广泛的功能和用例,为开发者提供了丰富的开源库和模块。
  2. Node.js 的默认选择: npm 与 Node.js 生态系统集成良好,作为默认的包管理器,简化了依赖管理。
  3. 成熟的生态系统: npm 经过多年发展,拥有稳定的基础设施和社区支持。
  4. 全面的命令行界面(CLI): 提供了广泛的命令和选项,便于管理包、脚本和配置。
  5. 语义化版本控制: 遵循 SemVer 规则,帮助开发者准确指定依赖版本范围。
  6. 自定义脚本: 允许在 package.json 中定义自定义脚本,通过 npm run 执行,自动化开发任务。
  7. 与 npm 仓库集成: 与 npm 仓库集成,便于发布和发现包。

缺点:

  1. 性能问题: 在大型项目中可能会遇到性能问题,如安装速度慢和资源消耗高。
  2. 版本控制复杂性: 管理包版本和依赖冲突可能具有挑战性,需要手动干预。
  3. 依赖膨胀: 默认的本地安装可能导致不必要的依赖积累,增加项目大小和复杂性。
  4. 安全问题: 第三方代码可能存在安全漏洞,需要开发者积极应对。
  5. 依赖于中心化仓库: 依赖于中心化仓库可能导致单点故障和网络瓶颈。
  6. 有限的离线支持: 离线能力不如其他一些包管理器,如 Yarn。

Yarn

优点:

  1. 性能提升: Yarn 提供更快的安装时间和更有效的依赖解析。
  2. 确定性依赖解析: 通过 yarn.lock 文件确保依赖的一致性。
  3. 离线支持: 缓存包,允许在离线状态下安装依赖。
  4. 直观的 CLI: 提供清晰、简洁的命令,易于使用。
  5. 改进的错误处理: 提供详细的错误信息和诊断。
  6. 向后兼容性: 与 npm 兼容,方便从 npm 过渡到 Yarn。

缺点:

  1. 兼容性问题: 与 npm 之间可能存在兼容性问题。
  2. 资源消耗: 缓存和并行安装可能消耗大量系统资源。
  3. 社区分裂: 生态系统和社区支持可能不如 npm 广泛。
  4. 锁文件漂移: 如果不更新锁文件,可能会导致锁文件与实际依赖不一致。
  5. 配置选项有限: 配置选项不如 npm 精细。

pnpm(Performant npm)

优点:

  1. 共享依赖: 通过共享依赖模型减少磁盘空间使用。
  2. 高效安装: 利用共享依赖和缓存机制,提供快速的安装时间。
  3. 确定性依赖解析: 通过 pnpm-lock.yaml 文件确保依赖的一致性。
  4. 减少网络带宽使用: 跨项目共享包下载,减少网络数据传输。
  5. 改进的缓存效率: 高效的缓存机制,减少重复下载。
  6. CLI: 提供直观的 CLI,易于执行常见任务。
  7. 与 npm 兼容: 与 npm 仓库和工作流兼容。

缺点:

  1. 学习曲线: 需要学习新的命令和工作流程。
  2. 兼容性问题: 与 npm/Yarn 之间可能存在兼容性问题。
  3. 资源消耗: 缓存依赖和共享包管理可能消耗系统资源。
  4. 锁文件处理: 管理锁文件并确保其一致性可能具有挑战性。
  5. 社区支持: 生态系统和社区支持可能不如 npm 和 Yarn 广泛。

根据前面提到的一些优缺点,结合原文作者研究及其个人观点,我们可以看到下面的对比图,数字 1 表示最低分,数字 3 表示最高分:

特性npmYarnpnpm
包仓库数量333
性能233
成熟的生态系统322
全面的命令行界面(CLI)333
离线支持133
安全性122
依赖膨胀133
减少网络带宽使用223
改进的缓存效率223
确定性依赖解析233
磁盘使用123
锁文件处理211

npm、Yarn 和 pnpm 之间的命令比较

以下是 npm、yarn 和 pnpm 之间的命令比较:

功能描述npm commandYarn commandpnpm equivalent
安装依赖npm installyarnpnpm install
安装指定的包到项目中npm install [pkg]yarn add [pkg]pnpm add [pkg]
卸载项目中的指定包npm uninstall [pkg]yarn remove [pkg]pnpm remove [pkg]
更新当前项目的包到最新版本npm updateyarn upgradepnpm update
列出项目中安装的所有包npm listyarn listpnpm list
运行npm脚本npm run [scriptName]yarn [scriptName]pnpm [scriptName]
运行一个命令而不安装它npx [command]yarn dlx [command]pnpm dlx [command]
执行一个命令而不将包添加到项目中npm execyarn exec [commandName]pnpm exec [commandName]
初始化一个新的项目并可选择初始化器npm init [initializer]yarn create [initializer]pnpm create [initializer]

二、安装与使用

1、安装Node.js

推荐参考:Node.js | npm下载安装及环境配置教程

2、Yarn / pnpm安装与配置

推荐参考:

  • Node.js | Yarn下载安装与环境配置
  • Node.js | pnpm下载安装与环境配置

附录

推荐资料:

  • 2024 Node.js Package Manager 指南:npm、Yarn、pnpm 比较 — 2024 Node.js Package Manager Guide: npm, Yarn, pnpm Compared (nodesource.com)

相关文章:

npm | Yarn | pnpm Node.js包管理器比较与安装

一、包管理器比较 参考原文链接: 2024 Node.js Package Manager 指南:npm、Yarn、pnpm 比较 — 2024 Node.js Package Manager Guide: npm, Yarn, pnpm Compared (nodesource.com) 以下是对 Node.js 的三个包管理工具 npm、Yarn 和 pnpm 的优缺点总结&am…...

Linux下编译MFEM

本文记录在Linux下编译MFEM的过程。 零、环境 操作系统Ubuntu 22.04.4 LTSVS Code1.92.1Git2.34.1GCC11.4.0CMake3.22.1Boost1.74.0oneAPI2024.2.1 一、安装依赖 二、编译代码 附录I: CMakeUserPresets.json {"version": 4,"configurePresets": [{&quo…...

【团购核销】抖音生活服务商家应用快速接入②——商家授权

文章目录 一、前言二、授权流程三、授权Url3.1 Url参数表3.2 授权能力表3.3 源码示例 四、授权回调4.1 添加授权回调接口4.2 授权回调接口源码示例 五、实际操作演示六、参考 一、前言 目的:将抖音团购核销的功能集成到我们自己开发的App和小程序中 【团购核销】抖音…...

django宠物服务管理系统

摘 要 宠物服务管理系统是一种专门为宠物主人和宠物服务提供商设计的软件。它可以帮助用户快速找到附近的宠物医院、宠物美容店、宠物寄养中心等服务提供商,并预订相关服务。该系统还提供了一系列实用的功能。通过使用宠物服务管理系统,用户可以更加方便…...

vue2中使用three.js步骤

1.使用npm 下载依赖这里以0.158.0版本为例 npm install three0.158.0 --save 2. <template><div id"container"></div> </template><script> import * as THREE from three; import { OBJLoader } from three/examples/jsm/loaders/O…...

部落商城App开发笔记 2024.11.21 实现进入app就是短视频

初步效果: 基于图鸟UI二次开发, 这里静态资源没有加载, 我在本机上安装了一个nginx, 需要启动一下. PS C:\dev\nginx-1.26.2> start .\nginx.exe重新刷新就有数据了. 先看看目前的页面吧. 首页. 分类: 发现. 消息. 购物车. 我的. 这个项目是有短视频的功能…...

解决.DS_Store 在项目一致无法排除,.gitignore里也不生效

.DS_Store 是 macOS 操作系统创建的隐藏文件&#xff0c;通常用于存储目录的属性&#xff0c;比如视图设置、图标位置等。它通常不应包含在代码仓库中&#xff0c;因此需要排除它。你提到即使将其添加到 .gitignore 文件中&#xff0c;仍然无法排除它&#xff0c;可能是由于以下…...

MySQL-关键字执行顺序

&#x1f496;简介 在MySQL中&#xff0c;SQL查询语句的执行遵循一定的逻辑顺序&#xff0c;即使这些关键字在SQL语句中的物理排列可能有所不同。 &#x1f31f;语句顺序 (8) SELECT (9) DISTINCT<select_list> (1) FROM <left_table> (3) <join_type> JO…...

极客时间《Redis核心技术与实战》开篇词 知识点总结

Redis 主要的数据持久化方式 RDB&#xff08;Redis Database Backup file&#xff09; RDB 是 Redis 提供的一种数据快照持久化方式&#xff0c;它会在指定的时间间隔内生成数据集的时间点快照&#xff0c;并将这些快照保存到磁盘上的一个 RDB 文件中。RDB 文件是一个压缩的二…...

TCP并发服务器

端口号快速复用函数 通过getsockopt和setsockopt函数&#xff0c;管理套接字的端口号复用设置。具体操作如下&#xff1a; getsockopt函数 int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen);功能&#xff1a;获取套接字的某些选项的属性。…...

Debug-031-近期功能实现小结

由于时间原因&#xff0c;没办法对每个小的功能点进行比较细致的总结&#xff0c;这里统一去记录一下最近的实现了的功能&#xff0c;算是存档备份&#xff0c;为今后开发带来便利和参考。 一、ACEeditor ACEeditor使用手册&#xff08;一&#xff09;_ace editor-CSDN博客 AC…...

Consumer Group

不&#xff0c;kafka-consumer-groups.sh 脚本本身并不用于创建 Consumer Group。它主要用于管理和查看 Consumer Group 的状态和详情&#xff0c;比如列出所有的 Consumer Group、查看特定 Consumer Group 的详情、删除 Consumer Group 等。 Consumer Group 是由 Kafka 消费者…...

.NET架构师学习大纲

目录 微服务 Consul Ocelot Polly Skywalking Exceptionless Apollo Jenkins Docker Kubernetes DDD领域驱动设计 DevOps CDN Nginx 应用服务器集群 数据库高可用 异步化架构 Azure前沿技术 工具排查 O/RM-EFCore IOC&AOP Core WebApi WebServer 数…...

【代码随想录】贪心

455. 分发饼干 题目 随想录 本质&#xff1a; 对于每个孩子&#xff0c;使用可以满足该孩子的最小的饼干。所以对孩子胃口和饼干进行sort排序&#xff0c;依次将大的饼干满足给孩子。 贪心策略&#xff1a; 想一下局部最优&#xff0c;想一下全局最优&#xff0c;如果局部最优…...

Harmony鸿蒙类似与Android中broadcast广播的api使用及释义

EventHub模块提供了事件中心&#xff0c;提供订阅、取消订阅、触发事件的能力。 这里需要注意&#xff0c;该模块接口仅可在Stage模型下使用。且Api>9 EventHub.on on(event: string, callback: Function): void; 订阅指定事件。&#xff08;接收广播&#xff09; 参…...

openGauss 6.0.0主备部署(企业版)

openGauss 6.0.0主备部署&#xff08;企业版&#xff09; 文章目录 openGauss 6.0.0主备部署&#xff08;企业版&#xff09;一、环境准备1.操作系统环境2.修改主机名3.设置字符集编码4.修改openEuler默认yum源5.安装所需工具6.同步网络时间7.关闭防火墙 二、安装openGauss数据…...

【机器学习】聚类算法原理详解

聚类算法 性能度量&#xff1a; 外部指标 jaccard系数&#xff08;简称JC&#xff09;FM指数&#xff08;简称FMI&#xff09;Rand指数&#xff08;简称RI&#xff09; 内部指标 DB指数&#xff08;简称DBI&#xff09;Dunn指数&#xff08;简称DI&#xff09; 距离计算&am…...

Ubuntu20.04从零安装IsaacSim/IsaacLab

Ubuntu20.04从零安装IsaacSim/IsaacLab 电脑硬件配置&#xff1a;安装Isaac sim方案一&#xff1a;pip安装方案二&#xff1a;预构建二进制文件安装1、安装ominiverse2、在ominiverse中安装isaac sim&#xff0c;下载最新的4.2版本 安装Isaac Lab1、IsaacLab环境克隆2、创建con…...

基于Java Springboot大学校园旧物捐赠网站

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数据…...

【Java 集合】Collections 空列表细节处理

问题 如下代码&#xff0c;虽然定义为非空 NonNull&#xff0c;但依然会返回空对象&#xff0c;导致调用侧被检测为空引用。 实际上不是Collections的问题是三目运算符返回了null对象。 import java.util.Collections;NonNullprivate List<String> getInfo() {IccReco…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.

ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #&#xff1a…...

苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会

在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...