跳至主要内容

PnPify

危险

自 Yarn 支持开箱即用的 node_modules 安装以来,PnPify 已基本弃用。

动机

Plug'n'Play 在设计上与仅使用 require API 的所有项目兼容,无论它是 requirerequire.resolve 还是 createRequire。但是,一些罕见的项目更喜欢自己重新实现 Node 解析,因此默认情况下与我们的环境不兼容(除非它们将解析器与 PnP API 集成)。

PnPify

PnPify 是一款旨在解决这些兼容性问题的工具。它并不完美,它会带来自己的一系列注意事项,并且不允许你利用 PnP 提供的所有功能,但它通常足以让你在更好的解决方案实现之前解除阻塞。

它的工作原理很简单:当一个非 PnP 兼容项目尝试访问 node_modules 目录(例如通过 readdirreadFile)时,PnPify 会拦截这些调用并将它们转换为对 PnP API 的调用。然后,根据结果,它模拟一个虚拟 node_modules 文件夹的存在,底层工具将使用该文件夹,而不知道这些文件是从虚拟文件系统中提取的。

用法

  1. 将 PnPify 添加到你的依赖项中
yarn add @yarnpkg/pnpify
  1. 使用 pnpify 运行不兼容的工具
yarn pnpify tsc

可以在其 专用页面 上找到有关 run 命令的更多详细信息。

注意事项

  • 由于 PnPify 模拟 node_modules 目录的方式,可能会出现一些问题,尤其是在监视 node_modules 内目录的工具中。

  • PnPify 不是被设计为长期解决方案;其目的是纯粹帮助项目过渡到更严格的 Plug'n'Play 模块解析方案。依赖 PnPify 不会让你充分利用 Plug'n'Play 提供的所有功能,特别是完美的扁平化和边界检查。

IDE 支持

在你最喜欢的文本编辑器中使用 Plug'n'Play 安装时,你可能希望继续使用你的扩展,如 ESLint 或 Prettier。为此,你可能需要使用 yarn sdks。有关更多信息,请参阅 编辑器 SDK 部分中的详细文档。