你可以在没有 Yarn 的机器上使用 Yarn2 PnP “零安装”吗?
Posted
技术标签:
【中文标题】你可以在没有 Yarn 的机器上使用 Yarn2 PnP “零安装”吗?【英文标题】:Can you use Yarn2 PnP "zero-installs" on a machine without Yarn? 【发布时间】:2021-03-14 17:07:06 【问题描述】:我正在使用 Yarn 2 的 "zero install" 东西作为一个小工具来解决我老板的一个随机过敏问题。 (他对必须在克隆的 repo 上运行 npm i
以使其工作的期望感到不满,并坚持将 node_modules
放入版本控制中不知何故不是一个可怕的想法;所以我想以此为借口潜入纱线,并阻止他通过。)
据我了解,“零安装”基本上意味着 Yarn 试图使将依赖项安装状态放入 VCS 中实际上是可行的。然而,要运行实际的应用程序,Yarn 需要用其 PnP 机制替换 Node 的依赖解析。对于从 Yarn 脚本运行的 Node 实例,这会自动发生,但运行 Yarn 脚本需要 Yarn 可用。 (请记住,我们正在努力解决有人在安装东西时任意固执的问题。)
我最好的方法是将我的start
脚本设置为npx yarn node app.js
,但这感觉不必要地复杂;毕竟,使用 Yarn 2,工具本身存储在 .yarn/releases
中,全局 yarn
命令使用它,但这是一些捆绑器输出的一个巨大的缩小 blob,我不知道如何开始调用它。
【问题讨论】:
【参考方案1】:要注册 Yarn 生成的 PnP 运行时,只需从命令行中要求 .pnp.js
就足够了,因此您可以通过以下方式运行 app.js
:
node -r ./.pnp app.js
还有另一种方法可以做到这一点:您可以在应用程序中要求.pnp.js
,但是当您不是从命令行执行此操作时,您还必须在返回的 PnP API 实例上调用 setup
函数,只需添加此行在app.js
之上:
require('./.pnp').setup();
【讨论】:
哦,真的超级方便。以上是关于你可以在没有 Yarn 的机器上使用 Yarn2 PnP “零安装”吗?的主要内容,如果未能解决你的问题,请参考以下文章