• 关于yarn 的Plug‘n‘Play特性


    yarn 的Plug’n’Play特性提供了一种新的包管理的策略,主要是为了解决之前yarn 包管理的的一些痛点,下面主要分当前包管理的原理及问题Plug’n’Play的实现方案,****Plug’n’Play使用方式三部分介绍Plug’n’Play(简称PnP)特性。

    当前包管理的原理及问题

    PnP主要是为了解决当前依赖管理方式 安装依赖,引用依赖效率低下的问题,这里介绍下现有安装依赖和引用依赖的方式

    安装依赖

    当执行yarn intall的时候,一般会执行如下四个操作:

    1. 解析依赖版本号

    2. 下载对应版本模块的tar包到本地离线缓存(离线缓存目录,Windows下目录为:Users/[user]/AppData/Local/Yarn/Cache/v6/)

    3. 解压镜像

    4. 将缓存中的包拷贝到node_modules中,另外包中的依赖也会拷贝到对应包的node_modules中

      注意:

    • 如果安装的包在node_modules根目录中有相同的包,会直接替换node_modules根目录中的包

    • 如果多个包有不同版本号的相同的依赖包,则将对应版本的依赖包,拷贝到对应包的node_modules 中,另外最后一个安装该依赖包的包引用的是node_modules中的包

    图片
    如上图,以koa和express为例,因为koa和express都依赖了debug包,且依赖的debug包的版本号不一样,又因为先安装的koa,后安装的express,所以express引用根目录node_modules中的包,而koa包目录中会再创建一个node_modules目录,将对应版本的debug包拷贝到自己的node_moduels中。(整体介绍的比较啰嗦,如果已懂可以略过,没有的话,看完最好亲自试验一番)

    引用依赖

    当我们在引用(require(‘koa’)) 一个包时,

    1. 会先从当前目录中找node_moduels目录中的包,没有找到则去父目录中找,依次类推,直到根目录。

    2. 找到node_moduels后,会在node_modules中寻找该包,一般是找package.json中的包名

    由此可以看出yarn 之前的管理方式有以下缺点:

    1. 大量的文件I/O,导致安装依赖和引用依赖效率低下

    2. 由于每个工程下都挂载一个node_modules,占用磁盘空间大

    Plug’n’Play实现方案

    PnP 的工作原理是通过通过.pnp.js维护一张静态映射表,替代了从依赖缓存拷贝到node_moduels的方案

    这里重点介绍下.pnp.js这个脚本文件

    图片
    从图中我们可以看出,.pnp.js中主要包含如下信息:

    包名、版本号、包的缓存路径

    (Users/[username]/AppData/Local/Yarn/Cache/v6),对于不同版本的同一个包会安装多个包
    图片

    如上图,对于不同版本的同一个包,安装了多份

    优点

    很显然,我们可以看到,使用这种方式:

    1. 安装依赖速度明显的得到了提升

    2. 减少了磁盘的占用空间

    Plug’n’Play使用方式

    yarn --pnp
    
    • 1

    执行如上命令,会进行如下操作

    1. 自动创建.pnp.js文件

    2. 如果已经安装的包在yarn缓存目录中没有,则会重新下载安装到缓存目录中

    3. 并package.json中添加如下配置:

    "installConfig": {
    "pnp": true
     }
    
    • 1
    • 2
    • 3

    如果,不想使用PnP方式了,可以改为false,至此再安装包就不会创建node_modules了,也不会将新安装的包拷贝到已有的node_modules中了。

    官网地址:

    https://yarnpkg.com/features/pnp

    关于PnP的特性就介绍到这里,另外推荐大家在学习的时候,尤其是对于新概念,新知识学习的时候,最好要亲自试验,亲自试验,亲自试验⏰⏰⏰,不要仅仅看看就可以了,反正对我这这种笨的人,只要是没亲自试验过的知识,不管是从哪薅来的,最终都没有掌握😭😭😭😭😭

  • 相关阅读:
    NSS [鹏城杯 2022]压缩包
    百度网盘svip白嫖永久手机2024最新教程
    VMware workstation的安装
    docker安装(持续更新中)
    游戏 NFT 市场:Opensea 最容易切的蛋糕
    PB数据库开发技术(二)-PowerBuilder数据定义
    数巅科技联合长江计算打造AskBot企业智能问答一体机
    如何系列 如何玩转远程调用之OpenFegin+SpringBoot(非Cloud)
    protobuf 编译proto文件
    ctfshow web入门 web338--web344
  • 原文地址:https://blog.csdn.net/gggg5643/article/details/126573518