nodeJS下npm和yarn的关系和区别详解

一、命令对应关系

1. 初始化项目

操作 npm 命令 Yarn 命令
初始化项目 npm init yarn init
跳过提问快速初始化 npm init -y yarn init -y

2. 安装依赖

操作 npm 命令 Yarn 命令
安装项目所有依赖 npm install yarn install
添加依赖 npm install <package-name> yarn add <package-name>
添加开发依赖 npm install <package-name> --save-dev yarn add <package-name> --dev
添加全局依赖 npm install -g <package-name> yarn global add <package-name>
安装特定版本的依赖 npm install <package-name>@<version> yarn add <package-name>@<version>

3. 删除依赖

操作 npm 命令 Yarn 命令
删除依赖 npm uninstall <package-name> yarn remove <package-name>
删除全局依赖 npm uninstall -g <package-name> yarn global remove <package-name>

4. 更新依赖

操作 npm 命令 Yarn 命令
更新依赖 npm update <package-name> yarn upgrade <package-name>
更新所有依赖到最新版本 npm update yarn upgrade

5. 清理缓存

操作 npm 命令 Yarn 命令
清理缓存 npm cache clean --force yarn cache clean

6. 查看信息

操作 npm 命令 Yarn 命令
查看包信息 npm info <package-name> yarn info <package-name>
查看依赖树 npm list yarn list

7. 运行脚本

操作 npm 命令 Yarn 命令
运行脚本 npm run <script-name> yarn <script-name>
查看所有脚本 npm run yarn run

二、两者的主要区别

1. 性能对比

  • Yarn:并行化安装依赖,比 npm 更快,尤其是首次安装时。
  • npm:较早版本的 npm 安装较慢,但自 npm 5+ 起,性能有了显著提升。

2. 锁定文件

  • Yarn :使用 yarn.lock 文件,确保团队环境中依赖版本的一致性。
  • npm :使用 package-lock.json 文件,功能类似,但结构稍有不同。

3. 缓存机制

  • Yarn:默认会将所有下载的包缓存到本地,再次安装时直接读取缓存,无需重新下载。
  • npm:有缓存机制,但需要手动配置才能达到类似 Yarn 的效果。

4. 工作空间(Monorepo)支持

  • Yarn :原生支持工作空间(workspaces),适合管理 Monorepo 项目。
  • npm:从 npm 7 开始支持工作空间,但功能不如 Yarn 强大。

5. 命令简洁性

  • Yarn 的命令更简洁。例如:
    • 添加依赖:yarn add vs. npm install
    • 删除依赖:yarn remove vs. npm uninstall

6. 全局依赖管理

  • Yarn :全局依赖通过 yarn global add 管理,独立于系统环境。
  • npm :全局依赖通过 npm install -g 管理,依赖系统环境,容易出现权限问题。

三、选择 Yarn 还是 npm?

场景 推荐工具
项目需要更快的安装速度 Yarn
项目需要使用 Monorepo 管理 Yarn
项目需要更广泛的社区支持 npm
追求更现代的依赖管理工具 Yarn 或 npm 7+

总结:

  • Yarn:适合需要高性能和复杂依赖管理的项目。
  • yarn:随着版本升级,已大大缩小与 Yarn 的差距,适合大多数场景。

你可以根据项目需求选择 Yarn 或 npm。如果你的团队使用 Yarn,可以统一使用它;如果没有特殊需求,npm 已经是一个可靠的选择。

相关推荐
kyriewen1 小时前
AI 写的 React 组件,合并前必查的 6 个坏味道——每个都有代码对比
前端·javascript·react.js
多加点辣也没关系1 小时前
JavaScript|第13章:原始类型的方法
开发语言·javascript·ecmascript
এ慕ོ冬℘゜2 小时前
深入理解 JavaScript 事件体系:Window、鼠标与键盘事件详解
开发语言·javascript·okhttp
摇滚侠3 小时前
SpringBoot3+Vue3 全套视频教程 45-51
前端·javascript·vue.js
触底反弹4 小时前
🔥 RAG 到底是怎么工作的?掰开揉碎了给你讲明白!
javascript·人工智能·后端
Hilaku4 小时前
前端大裁员背后的恐慌:我们还剩什么底牌?
前端·javascript·程序员
云空4 小时前
《Three.js 3D实例大全》
开发语言·javascript·3d·three.js
云空5 小时前
《Three.js 3D坦克对战【AI单机版】》
javascript·人工智能·3d·three.js
默_笙5 小时前
🚲 手写一个"Claude Code":我用 LangChain + ReAct 循环,让 AI 自己读文件、解释代码
前端·javascript
等咸鱼的狸猫5 小时前
# JS 核心六大主题:闭包内存模型、原型链查找、事件流机制与 Promise / Event Loop 实现视角复盘
前端·javascript