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 表示最高分:

特性 npm Yarn pnpm
包仓库数量 3 3 3
性能 2 3 3
成熟的生态系统 3 2 2
全面的命令行界面(CLI) 3 3 3
离线支持 1 3 3
安全性 1 2 2
依赖膨胀 1 3 3
减少网络带宽使用 2 2 3
改进的缓存效率 2 2 3
确定性依赖解析 2 3 3
磁盘使用 1 2 3
锁文件处理 2 1 1

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

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

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

二、安装与使用

1、安装Node.js

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

2、Yarn / pnpm安装与配置

推荐参考:


附录

推荐资料:

相关推荐
顾林海4 分钟前
Flutter Dart 流程控制语句详解
android·前端·flutter
tech_zjf6 分钟前
装饰器:给你的代码穿上品如的衣服
前端·typescript·代码规范
xiejianxin5207 分钟前
如何封装axios和取消重复请求
前端·javascript
parade岁月7 分钟前
从学习ts的三斜线指令到项目中声明类型的最佳实践
前端·javascript
狼性书生10 分钟前
electron + vue3 + vite 渲染进程与渲染进程之间的消息端口通信
前端·javascript·electron
阿里巴巴P8资深技术专家10 分钟前
使用vue3.0+electron搭建桌面应用并打包exe
前端·javascript·vue.js
coder_leon14 分钟前
Vite打包优化实践:从分包到性能提升
前端
shmily_yyA14 分钟前
【2025】Electron 基础一 (目录及主进程解析)
前端·javascript·electron
吞吞071116 分钟前
浅谈前端性能指标、性能监控、以及搭建性能优化体系
前端
arcsin118 分钟前
雨水-electron项目实战登录
前端·electron·node.js