包管理工具:Yarn

271 阅读5分钟

Yarn 介绍

Yarn 是一个 JavaScript 包管理工具,最初由 Facebook、Google 和 Exponent 等公司共同开发,旨在解决 npm 的一些性能和可靠性问题。Yarn 的核心目标是提高包管理的速度、一致性和效率,同时保持与 npm 的兼容性。随着版本的迭代,Yarn 逐渐引入了更多创新特性,并且成为了许多开发者的首选工具。

Yarn 的主要特点

  1. 速度
    Yarn 的最大特点之一是它的安装速度。相比于早期的 npm,Yarn 引入了并行安装的机制,这可以显著减少安装时间。此外,Yarn 会将已安装的包缓存在本地,后续安装时无需重新下载,进一步提高了效率。

  2. 离线模式
    Yarn 提供了离线模式,允许在没有网络连接的情况下安装依赖。如果你曾经安装过某个依赖,Yarn 会从本地缓存中获取依赖,而无需重新从网络下载。

  3. 一致性
    Yarn 使用 yarn.lock 文件来锁定依赖的版本,从而确保项目的依赖一致性。这意味着无论开发者在何时、何地安装依赖,都会安装相同的版本,避免了因版本不一致导致的 bugs 或问题。与之相对的是 npm 之前的 package-lock.json(在 npm 5+ 中引入)。

  4. 更好的工作空间支持
    Yarn 提供了对工作空间(Workspaces)的原生支持,这对于管理 monorepo(多个项目在同一个仓库中的情形)非常有用。通过工作空间,Yarn 可以让你在同一个项目中管理多个包,并且共享依赖,避免重复安装。

  5. 易于使用的 CLI
    Yarn 的命令行接口(CLI)与 npm 很相似,但提供了更高效的操作方式。例如,使用 yarn add 来安装依赖,yarn upgrade 来更新依赖,yarn remove 来删除依赖,这些命令都与 npm 的命令保持一致,但使用体验更好。

  6. 并行化
    Yarn 在安装依赖时会并行处理多个包的安装,而不是按照顺序逐个安装。这样可以极大提高安装速度,尤其是当项目有大量依赖时。

  7. 可靠的依赖解析
    Yarn 会确保每个包的版本号都能正确解析。即使项目的依赖有多个层次,Yarn 会根据 yarn.lock 文件来确保每个包的版本都符合预期,避免了版本冲突或意外更新。

Yarn 的安装

你可以通过以下几种方式安装 Yarn:

  1. 通过 npm 安装: 如果你已经安装了 npm(或者 Node.js),你可以使用以下命令来全局安装 Yarn:

    npm install -g yarn
    
  2. 通过安装脚本安装: 官方提供了安装脚本,你可以通过命令行来运行这个脚本,安装 Yarn:

    curl -o- -L https://yarnpkg.com/install.sh | bash
    
  3. 使用 Homebrew 安装(macOS): 如果你在 macOS 上使用 Homebrew 包管理器,可以使用以下命令安装 Yarn:

    brew install yarn
    

Yarn 的常见命令

  • 安装依赖

    yarn install
    

    会根据 package.json 安装项目所需的依赖,并生成或更新 yarn.lock 文件。

  • 添加依赖

    yarn add <package-name>
    

    用于安装新的包并将其添加到 dependencies 中。如果是开发依赖,可以使用 -D 参数:

    yarn add <package-name> -D
    
  • 删除依赖

    yarn remove <package-name>
    

    用于删除某个已安装的包,并且会更新 package.jsonyarn.lock

  • 更新依赖

    yarn upgrade
    

    会升级所有依赖到 package.json 中指定的最新兼容版本。你也可以指定包名来升级某个特定的依赖:

    yarn upgrade <package-name>
    
  • 生成 yarn.lock 文件

    yarn import
    

    这个命令会从 package-lock.jsonnpm-shrinkwrap.json 文件导入信息并生成 yarn.lock 文件,以便迁移到 Yarn。

  • 执行脚本: 如果你在 package.json 中定义了脚本,可以通过以下命令来执行:

    yarn run <script-name>
    
  • 启动工作空间: 如果你的项目是一个 monorepo 项目,使用 Yarn 的工作空间管理多个包时,可以使用:

    yarn workspaces run <script-name>
    

Yarn 版本演变

  • Yarn 1.x
    这是 Yarn 的最初版本,解决了 npm 的速度和一致性问题。它引入了 yarn.lock、离线安装、并行安装等功能,广泛被开发者接受。

  • Yarn 2.x (Berry)
    在 Yarn 2(也被称为 Yarn Berry)中,Yarn 进行了重大重构。新版本引入了许多新特性和改进:

    • Plug'n'Play (PnP):Yarn 2 引入了 Plug'n'Play 模式,移除了传统的 node_modules 文件夹,改为通过 PnP 的方式解析模块依赖,这大大提高了性能和安全性。
    • 改进的工作空间支持:更好地支持 monorepo,提供了更多灵活的配置选项。
    • 扩展插件系统:Yarn 2 通过插件系统让开发者可以扩展 Yarn 的功能,支持更多自定义配置和功能。
  • Yarn 3.x
    Yarn 3.x 延续了 2.x 的许多特性,并在稳定性和性能上进一步优化。此外,Yarn 3.x 还增强了与其他工具(如 pnpm 和 npm)的兼容性,并继续提升对现代 JavaScript 工具链的支持。

Yarn 与 npm 的比较

特性Yarnnpm
速度更快,支持并行安装和缓存机制较慢,但在 npm 5 以后有改进
依赖一致性使用 yarn.lock 确保一致性使用 package-lock.json 确保一致性
离线安装支持离线模式仅在缓存中有包时支持离线
工作空间强大的工作空间支持从 npm 7 开始支持工作空间
CLI提供一些额外的功能,命令更简洁基本命令功能,社区扩展较多
社区支持广泛,尤其是在 React 生态中全球最大,npm 包仓库最大

总结

Yarn 是一个高效且功能强大的 JavaScript 包管理工具,特别适合大型项目和 monorepo 管理。它的优势体现在速度、一致性、离线安装和工作空间支持等方面。尽管 npm 在最近几年做出了许多改进,但 Yarn 依然在性能、可扩展性和开发体验上具有独特的优势,尤其是对于需要高效管理大量依赖或大型项目的开发者。