Skip to content

yarn

Yarn 简介

Yarn 是一个 JavaScript 包管理工具,是 Facebook 开发的,并作为 npm 的替代品出现。Yarn 主要通过提高安装速度、提供更好的依赖管理和锁定机制来优化前端开发体验。它兼容 npm 的包管理,支持大多数 npm 命令,并能更有效地处理依赖冲突。

1. Yarnnpm 的关系

  • Yarn 的设计初衷是解决 npm 在依赖管理上的一些问题,如性能慢、依赖冲突、重复安装等。
  • Yarn 引入了更高效的缓存机制和并行安装,从而显著提高了安装速度。
  • Yarn 使用 yarn.lock 文件来锁定依赖的版本,这使得团队在不同机器上使用同样版本的依赖,避免了 npmpackage-lock.json 文件可能存在的不一致问题。

2. Yarn 的作用

  • 依赖管理Yarn 通过快速并行的方式安装依赖,并支持离线安装。它能够解决很多 npm 版本管理和冲突的问题。
  • 锁定版本:通过 yarn.lock 文件,确保每个开发者的依赖版本一致,避免因版本差异导致的错误。
  • 性能优化:与 npm 相比,Yarn 提供了更快的安装速度,并且通过缓存机制避免重复下载。

3. Yarn 的官网地址

https://yarnpkg.com/

4. Yarn 的版本差异

Yarn 1.x

  • 安装方式:使用 npmbrew 安装。
  • 依赖解析:通过 yarn.lock 文件锁定依赖的版本,保证依赖的一致性。
  • 性能:相较于 npmYarn 1.x 提供了更快的安装速度。
  • 命令:主要与 npm 类似,支持 yarn install, yarn add, yarn remove 等命令。

Yarn 2.x (Berry)

  • 主要改进:增强了 Yarn 的配置和插件系统,并引入了 Plug'n'Play (PnP) 技术,取代了传统的 node_modules 文件夹。
  • 性能提升:进一步提高了安装速度,减少了对磁盘的依赖。
  • 新特性
    • Plug'n'Play:将模块的安装和依赖查找机制通过 Yarn PnP 进行优化,避免传统的 node_modules 文件夹带来的冗余。
    • 版本管理:支持通过 "constraints" 对版本进行更加灵活和精确的控制。
    • CLI:增加了更多配置选项,灵活支持不同项目需求。
  • 兼容性:与 npm 和老版本 Yarn 有一定的不兼容性,需要进行升级和调整。

5. Yarn 的缺点

  • 学习曲线:对于一些开发者,Yarn 由于一些新特性(如 PnP、插件系统等)的引入,可能需要一些时间去理解和使用。
  • 兼容性问题:由于 Yarn 2.x 引入的 PnP 机制,某些依赖可能与老版本的工具或库不兼容,需要进行额外的配置或调整。
  • 复杂的配置:某些场景下,Yarn 的配置可能会变得复杂,特别是当涉及到多种不同的依赖管理策略时。

6. Yarn 的实现原理

6.1 依赖管理机制

Yarn 通过创建 yarn.lock 文件锁定所有依赖的版本,确保项目在不同环境下的构建结果一致性。在安装依赖时,Yarn 会优先根据 yarn.lock 来确定具体版本,从而避免了因依赖版本不同而导致的问题。

6.2 缓存机制

Yarn 会将已下载的依赖包缓存到本地磁盘,这样在后续安装时,就不需要再次从网络下载,极大提高了安装速度。即使在离线状态下,Yarn 也能继续安装项目依赖。

6.3 并行安装

Yarn 采用了并行安装的方式,使得多个依赖包能够同时安装,而不像 npm 的顺序安装,这显著提高了安装的速度。

6.4 Plug'n'Play(PnP)

Yarn 2.x 版本开始,Yarn 引入了 Plug'n'Play (PnP) 技术,避免了传统的 node_modules 目录结构。PnP 将模块的查找和加载过程从文件系统中脱离出来,通过内部的解析机制来处理模块的引用。这大大提高了模块的加载速度,同时也减少了硬盘空间的使用。

7. Yarn 的常用命令

命令说明
yarn install安装所有依赖包
yarn add <package>安装某个包并添加到 dependencies
yarn remove <package>移除某个包
yarn upgrade升级依赖包
yarn upgrade <package>升级某个依赖包
yarn global add <package>安装全局依赖包
yarn global remove <package>移除全局依赖包
yarn run <script>运行 package.json 中的脚本
yarn init初始化一个新的项目
yarn --version查看 yarn 的版本
yarn cache clean清除缓存

总结

  • Yarn 的优势

    • 提供了更快的安装速度和更稳定的依赖管理。
    • 通过 yarn.lock 文件锁定依赖,确保不同环境的构建结果一致。
    • 引入了 PnP 技术,提升了性能并减少了磁盘空间的使用。
  • Yarn 的缺点

    • Yarn 2.x 引入的 PnP 机制可能与老版本的工具和库不兼容,迁移成本较高。
    • 相对于 npmYarn 可能具有稍微陡峭的学习曲线,尤其是新特性和配置的使用。

Yarn 是一个高效、灵活的 JavaScript 包管理工具,特别适用于需要快速构建和稳定依赖管理的项目。