有一个称为Plug'n'Play的新的亮纱功能。
我想知道它到底是做什么的?
我知道它正在创建一个.pnp文件夹和一个.pnp.js文件,但是它会更改计算机上的其他任何内容,例如某个地方的配置文件吗?
谢谢。
Maë*_*son 19
我设计并实现了PnP,所以我可以聊几个小时
tl; dr:我们只写.pnp.js和.pnp文件夹(在常规Yarn缓存的顶部)。我们不会在其他任何地方存储配置。
当您运行时yarn install(即使没有PnP),也会发生一些事情:
node_modulesrsync基本上是一堆操作)使用PnP,工作流程如下:
.pnp.js¹就是这样。除了.pnp.js文件(和缓存,没有其他生成的文件)之外,没有其他生成的文件。
¹ 如您所述,我们还在项目中生成了一个.pnp文件夹(.yarn从Yarn 2开始)。该文件夹旨在包含两种类型的数据:
拔出的软件包是必须在项目本地的软件包。通常,这些是带有安装后脚本的软件包(我们无法将它们存储到缓存中,因为生成的工件可能与一个项目不同。
虚拟包,这是为您的依赖关系树中的每个包创建的符号链接,列出了对等依赖项。无需赘述,它们是设计的必要部分,并且需要从Yarn 2开始,这些文件不再存在require.resolve像以前一样进行工作。
该.pnp.js文件包含与以下内容类似的信息:
webpack@1.0.0 -> /cache/webpack-1.0.0/
-> it depends on lodash@1.0.0
lodash@1.0.0 -> /cache/lodash-1.0.0/
-> no dependencies
Run Code Online (Sandbox Code Playgroud)
通过获取这些信息,分辨率可以正确地推断出,当其中的文件/cache/webpack-1.0.0对进行require调用时lodash,必须从中加载所需的文件/cache/lodash-1.0.0。实际上,它有点复杂(我们保留了一个逆映射以提高性能,我们使用相对路径来确保可移植性,等等),但是这里有一个基本概念。
奖励:使用Yarn 2,我们将进一步改善此工作流程。它将是这样的:
.pnp.js以前相同的文件就是这样!如您所见,我们不再对软件包进行解压缩(相反,我们在运行时使用Node loader从软件包档案中读取它们)。
这样做有一个非常有趣的属性:如果缓存和.pnp.js文件都在其中,则无需运行即可运行yarn install应用程序!为了确保拥有这些文件,您只需要将它们添加到存储库中,然后像对待其他所有内容一样对它们进行版本控制即可。²
这非常有用,因为您无需记住yarn install在git rebase,,git pull或之后运行git checkout,并且CI系统不需要特殊的设置即可变得更快,更稳定-只需克隆您的应用程序即可使用。
² 在有人提到它之前,在存储库中检入二进制文件是完全可以的。node_modules在存储库中检入非常不好的原因是由于文本文件的数量成倍增加,这给Git带来了极大的压力-从技术上讲,从哲学上讲,由于无法进行代码审查。
在我描述的情况下,我们不会遇到相同的问题,因为文件的数量受到限制(每个程序包一个文件),并且查看它们非常容易-实际上,最好能清楚地看到公关将许多新软件包添加到您的项目中!
| 归档时间: |
|
| 查看次数: |
1098 次 |
| 最近记录: |