PnPify
自 Yarn 支持开箱即用的 node_modules
安装以来,PnPify 已基本弃用。
动机
Plug'n'Play 在设计上与仅使用 require
API 的所有项目兼容,无论它是 require
、require.resolve
还是 createRequire
。但是,一些罕见的项目更喜欢自己重新实现 Node 解析,因此默认情况下与我们的环境不兼容(除非它们将解析器与 PnP API 集成)。
PnPify
PnPify 是一款旨在解决这些兼容性问题的工具。它并不完美,它会带来自己的一系列注意事项,并且不允许你利用 PnP 提供的所有功能,但它通常足以让你在更好的解决方案实现之前解除阻塞。
它的工作原理很简单:当一个非 PnP 兼容项目尝试访问 node_modules
目录(例如通过 readdir
或 readFile
)时,PnPify 会拦截这些调用并将它们转换为对 PnP API 的调用。然后,根据结果,它模拟一个虚拟 node_modules
文件夹的存在,底层工具将使用该文件夹,而不知道这些文件是从虚拟文件系统中提取的。
用法
- 将 PnPify 添加到你的依赖项中
yarn add @yarnpkg/pnpify
- 使用 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 部分中的详细文档。