跳至主要内容

可扩展性

概述

许多 Yarn 用户有许多不同的用例,虽然我们尝试为大多数常见问题找到令人满意的解决方案,但我们的团队可能没有带宽来研究和维护一些最奇特的用例。为避免在你遇到 Yarn 尚未开箱即用的新情况时受到阻碍,我们提供了一个非常强大的 API,你可以在自己的自定义插件中利用它。

插件本质上是列在你的配置中的一些小脚本,Yarn 将在启动时动态地需要它们。

插件能做什么?

  • 插件可以添加新的解析器。解析器是负责将依赖范围(例如 ^1.2.0)转换为完全限定的包引用(例如 npm:1.2.0)的组件。通过实现解析器,你可以告诉 Yarn 哪些版本是特定范围的有效候选版本。

  • 插件可以添加新的获取器。获取器是获取我们在上一步中提到的完全限定包引用(例如 npm:1.2.0)并知道如何获取它们引用的实际包数据的组件。获取器可以处理远程源(例如 npm 注册表),也可以直接从磁盘上的位置(或任何其他数据源)查找包。

  • 插件可以添加新的链接器。一旦所有包都已找到并准备好安装,Yarn 将调用链接器生成安装目标正常工作所需的文件。例如,PnP 链接器生成 Node.js 加载器文件,node-modules 链接器生成 node_modules 文件夹,而假设的 Python 链接器将生成一个 virtualenv。

  • 插件可以添加新的命令。每个插件都可以根据需要提供任意数量的命令,这些命令将注入到我们的 CLI 中(还可以通过 yarn --help 使用它们)。由于 Yarn 插件与正在运行的 Yarn 进程动态链接,因此它们可以访问完整的 Yarn API,就像任何其他官方命令一样。这样,如果你发现 Yarn 缺少你需要的功能,你可以尝试使用你自己的自定义逻辑。

  • 插件可以注册到某些事件。Yarn 有一个称为“钩子”的概念,其中在包管理器生命周期中会定期触发事件。插件可以注册到这些钩子,以便根据核心允许的内容添加自己的逻辑。例如,每次执行安装时都会调用 afterAllInstalled 钩子。

如何编写插件?

我们为此准备了一个教程!前往 插件教程

提示

您需要在钩子和命令中使用 Yarn API - 学习它可能看起来很可怕,但您可以访问最好的示例:Yarn 本身!

例如,yarn workspaces focus 的实现只有 一百行代码,如果您希望根据自己的逻辑实现部分安装,这是一个很好的起点。