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安装与配置

推荐参考:


附录

推荐资料:

相关推荐
还是鼠鼠6 分钟前
图书管理系统 Axios 源码 __删除图书功能
前端·javascript·vscode·ajax·前端框架·node.js·bootstrap
轻口味25 分钟前
Vue.js `Suspense` 和异步组件加载
前端·javascript·vue.js
Fhd-学习笔记1 小时前
《大语言模型》综述学习笔记
笔记·学习·语言模型
m0_zj2 小时前
8.[前端开发-CSS]Day08-图形-字体-字体图标-元素定位
前端·css
还是鼠鼠2 小时前
图书管理系统 Axios 源码__编辑图书
前端·javascript·vscode·ajax·前端框架
北极象2 小时前
vue3中el-input无法获得焦点的问题
前端·javascript·vue.js
百度网站快速收录2 小时前
网站快速收录:如何优化网站头部与底部信息?
前端·html·百度快速收录·网站快速收录
Loong_DQX3 小时前
【react+redux】 react使用redux相关内容
前端·react.js·前端框架
鸠摩智首席音效师3 小时前
PM2 restart 和 reload “–update-env“ 选项的使用
node.js
GISer_Jing3 小时前
react redux监测值的变化
前端·javascript·react.js