你能在没有 Yarn 的机器上使用 Yarn2 PnP "zero-installs" 吗?

Can you use Yarn2 PnP "zero-installs" on a machine without Yarn?

我正在玩 Yarn 2 的 "zero install" 东西作为一个小工具来解决我老板的随机过敏症之一。 (他对必须 运行 npm i 在克隆的回购上使其工作的期望感到不满,并坚持将 node_modules 放入版本控制在某种程度上不是一个可怕的想法;所以我想以此为借口潜入 Yarn 并阻止他为其提供动力。)

据我了解,“零安装”的基本意思是 Yarn 试图使将依赖项安装状态放入 VCS 实际上是可行的。然而,对于 运行 实际的应用程序,Yarn 需要用其 PnP 机制替换 Node 的依赖项解析。对于来自 Yarn 脚本的节点实例 运行,这会自动发生,但是 运行ning Yarn 脚本需要 Yarn 可用。 (请记住,我们正在努力解决有人固执地安装东西的问题。)

我最好的方法是让我的 start 脚本成为 npx yarn node app.js,但这感觉不必要地复杂;毕竟,对于 Yarn 2,该工具本身存储在 .yarn/releases 中,全局 yarn 命令使用它,但这是一些打包程序输出的巨大缩小块,我不知道我怎么会开始调用它。

要注册 Yarn 生成的 PnP 运行时间,只需从命令行要求 .pnp.js 就足够了,因此您可以通过以下方式 运行 您的 app.js

node -r ./.pnp app.js

还有另一种方法可以做到这一点:您可以在应用程序中要求 .pnp.js,但是当您不是从命令行执行此操作时,您还必须在返回的 PnP 上调用 setup 函数 API 实例,只需将此行添加到 app.js:

之上

require('./.pnp').setup();