来自 文件 纱线v2的松散模式。
Yarn提供了一个 "松散 "模式,它将导致PnP链接器与node-modules hoister协同工作--我们将首先生成在典型的node_modules安装中会被提升到顶层的包的列表,然后将这个列表作为我们所说的 "回落池"。
在运行时,如果任何一个版本的依赖最终都进入了回调池,那么需要未列出的依赖的包仍然可以访问它们(具体哪些包允许依赖回调池可以通过pnpFallbackMode进行调整)。
那么这个 "后备池 "到底在哪里呢?在 .yarn/cache
? 我在一个有很多deps的项目中激活了松散模式,但和之前的状态相比,没有发现任何区别。
在松散模式下,Yarn 2不安装任何新的依赖关系,它只添加后备决议。后备池是一组可以被所有依赖项使用的决议,它是一个存储于 .pnp.js
归档 fallbackPool
属性。你的所有依赖关系都可以访问已经被提升到根目录下的依赖关系。node_modules
文件夹。纱线2通过运行 node_modules
安装策略在内存中,并获取挂接到根目录的依赖列表。node_modules
文件夹。
请注意,该配置选项与 pnpMode: loose
是一个 pnpFallbackMode
选项,决定谁可以使用后备依赖。pnpFallbackMode
决定了谁可以使用回溯依赖关系。默认情况下,只有根项目的依赖关系才允许使用回溯依赖关系,而工作区的依赖关系不允许这样做。使用 pnpFallbackMode: all
根项目和工作区的依赖都可以依赖回退依赖。而有了 pnpFallbackMode: none
- 后备依赖根本不允许使用。
松散模式对于迁移到Yarn 2 PnP是很有用的,因为JavaScript生态系统中的一些包严重依赖于它们可以访问提升到顶层的包。node_modules
. 虽然他们依靠的是不应该的事实,但在松散的PnP模式下,Yarn只会发出警告并让这些包工作,而不是抛出访问违规错误。
松散模式是老 node_modules
和更新的PnP安装方案,意在更容易迁移到PnP。