[前端]动态加载问题-按条件加载

[前端]动态加载问题-按条件加载

  • 场景描述
  • 实践

场景描述

可以根据条件判断是否需要加载某些文件,例如当开发环境的时候我们需要加载 MOCK 文件或者不需要加载 MOCK 文件的情况,可以根据设置的 MOCK 的开关来决定是否需要加载

实践

在使用 webpack 时我们一般通过 require.context 实现动态的加载

export function importMocks() {
  try {
    //require.context("查找目录",是否查找子文件夹,符合规则的正则表达式) :
    //require.context 所有参数不能使用变量作为参数,只能直接使用表达式的字面值/(mock)_?([A-Z]\*)?\.ts$/或目录的字面值"../views"
    //require.context 不能在循环中使用
    const fileRequireContext: __WebpackModuleApi.RequireContext = require.context("../views", true, /(mock)*?([A-Z]_)?\.ts$/);
    fileRequireContext.keys().forEach((fileName) => {
      console.debug(fileName);
      // 获取内容
      fileRequireContext(fileName);
    });
  } catch (error) {
    console.debug(error);
  }
}

//根据flag决定是否加载mock文件
const mockData = async (flag) => {
  if (flag) {
    importMocks();
  }
};

以上是wepack方式

export function importMocks() {
  try {
    const fileRequireContext = import.meta.glob('../views/**/mock*.ts')
    Object.keys(fileRequireContext).forEach((fileFullName) => {
      fileRequireContext[fileFullName]();
      import(fileFullName);
    });
  } catch (error) {
    console.debug(error);
  }
}

//根据flag决定是否加载mock文件
const mockData = async (flag) => {
  if (flag) {
    importMocks();
  }
};

以上方式两种方式实现文件的按条件加载完全没有问题,但是 ES6 方式,发现当所谓的flag位置发生变化并且在import旁时判断就会失效,举例说明:

//根据flag决定是否加载mock文件
export function importMocks(flag) {
  try {
    const fileRequireContext: __WebpackModuleApi.RequireContext = require.context("../views", true, /(mock)*?([A-Z]_)?\.ts$/);
    fileRequireContext.keys().forEach((fileName) => {
      console.debug(fileName);
      // 获取内容
      flag?fileRequireContext(fileName):null;
    });
  } catch (error) {
    console.debug(error);
  }
}

wepack以上方式仍成功的根据flag决定是否加载mock文件

//根据flag决定是否加载mock文件
export function importMocks(flag) {
   try {
    const fileRequireContext = import.meta.glob('../views/**/mock*.ts')
    //该循环是flag是否失效的分界点
    Object.keys(fileRequireContext).forEach((fileFullName) => {
      fileRequireContext[fileFullName]();
      flag ?import(fileFullName):null;
      // if(flag){
      //   import(fileFullName)
      // }
    });
  } catch (error) {
    console.debug(error);
  }
}

而ES通过import方式加载mock文件,当通过三目表达式或if判断是否加载mock文件时flag失效,不论 flag 是什么都会加载mock文件的,思考并测试了一下,发现只要forEach内部判断都会导致flag失效,都会编译import语句实现文件的加载,但是flag判断是发生在forEach之外就不会失效

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/121142.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

dgl安装教程

我在矩池云服务器上安装了一个dgl的环境,以后都可以用这个了 首先我的基础环境是 最终的版本如下 安装步骤如下 pip install dgl0.9.1 -f https://s3.us-west-2.amazonaws.com/dgl-data/wheels/cu113/repo.html注意不能直接使用 pip install dgl -f https://s…

001. 变量、环境变量

1、在终端中显示输出 shell脚本通常以shebang起始:#!/bin/bash/ shebang是一个文本行,其中#!位于解释器路径之前。/bin/bash是Bash的解释器命令路径。bash将以#符号开头的行视为注释。脚本中只有第一行可以使用shebang来定义解释该脚本所使…

持续交付-Jenkinsfile 语法

实现 Pipeline 功能的脚本语言叫做 Jenkinsfile,由 Groovy 语言实现。Jenkinsfile 一般是放在项目根目录,随项目一起受源代码管理软件控制,无需像创建"自由风格"项目一样,每次可能需要拷贝很多设置到新项目,…

SpringBoot中的Environment

暂且理解成整个application.properties 通过Environment 可以访问application.properties中的任何配置 这里用yml配置 具体实用

docker部署tomcat

1.下载tomcat镜像 尽量去下载最新版本 直接输入docker pull tomcat 后面不跟版本号(要是跟版本号,你还要去官网去查看是否有此版本,太麻烦了) 2.查看镜像 3.通过镜像去run启动容器 -d 就是后台运行 --name 给容器取个新名字 -p 3355:8080…

淘宝/天猫获取商品历史价格信息 API 返回值说明

获取商品历史价格接口的业务场景主要是用于电商平台的开发。这些接口可以提供商品的历史价格信息,帮助开发者更好地了解商品的情况,为消费者提供更准确的价格参考。 在电商平台上,消费者常常需要了解商品的历史价格信息,以判断当…

数字孪生与电力行业的完美融合

电力行业一直是现代社会不可或缺的一部分,而数字孪生技术正逐渐改变这一传统行业的面貌。数字孪生电力解决方案通过将物理世界与数字世界相结合,为电力行业带来了前所未有的机会和挑战。本文为大家介绍山海鲸电力行业系列解决方案,带大家了解…

龙迅LT8911EXB功能概述 MIPICSI/DSI TO EDP

LT8911EXB 描述: Lontium LT8911EXB是MIPIDSI/CSI到eDP转换器,单端口MIPI接收器有1个时钟通道和4个数据通道,每个数据通道最大运行2.0Gbps,最大输入带宽为8.0Gbps。转换器解码输入MIPI RGB16/18/24/30/36bpp、YUV422 16/20/24bp…

在WSL2中安装多个Ubuntu实例

参考:How to install multiple instances of Ubuntu in WSL2 本文主要内容 第一步:在 WSL2 中安装最新的 Ubuntu第二步:下载适用于 WSL2 的 Ubuntu 压缩包第三步:在 WSL2 中安装第二个 Ubuntu 实例第四步:登录到第二个…

基于STC12C5A60S2系列1T 8051单片机SPI通信应用

基于STC12C5A60S2系列1T 8051单片机SPI通信应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍STC12C5A60S2系列1T 8051单片机SPI通信介绍STC12C5A60S2系列1T 8051单片…

APISpace IP归属地查询接口案例代码

1.IP归属地查询API 1.1 API接口简介 IP归属地查询API:根据IP地址查询归属地信息,包含国家、省、市、区县和运营商等信息。APISpace 提供了IPv4 和 IPv6 的IP归属地查询接口,并且包含了各种归属地精度查询的接口。 1.2 IPv4 IPv4归属地查询…

星乐园项目┃助学无止境·探访暖人心

2023年7月10日至10月31日,广州市从化区齐家社会工作服务中心的“星乐园-乡村儿童公益辅导服务项目”社工带领高校志愿老师、社区志愿者在从化区城郊街新开村、太平镇西湖村分阶段、分批次对两个助学点的学困儿童家庭开展了入户探访活动。旨在通过走访了解他们的生活…

HTTP-HTTPS区别详解

一、HTTP协议 1. GET和POST的请求的区别 Post 和 Get 是 HTTP 请求的两种方法,其区别如下: 应用场景: GET 请求是一个幂等的请求,一般 Get 请求用于对服务器资源不会产生影响的场景,比如说请求一个网页的资源。而 Po…

Java算法(四):index方法的实现 查找一个元素是否存在数组中,并且返回相应的结果(考虑重复的情况)

Java算法:(四) 文章目录 Java算法:(四)一、查找元素在数组中的索引二、考虑数组中有多个重复的情况 一、查找元素在数组中的索引 需求: 设计一个方法,查找元素在数组中的索引位置 …

pytest中的pytest.ini

[pytest] filterwarnings ignore::DeprecationWarning addopts -v -s markers uat:1 smok:2 log_cli1 xfail_strict True filterwarnings ignore::DeprecationWarning 这个的功能就是 test_login.py::Test_login::test_login_correct_password PASSEDwarnings summary …

Android Studio新建项目下载依赖慢,只需一个操作解决

新建的安卓工程,下载依赖贼慢怎么办?水一篇吧。 首先新建工程,建好以后项目就自动开始下载了,底部开始出现进度条,但是进度条一直不怎么动,网速也就十几k,要是等他下载得下一天。 直入主题&…

基于SSM框架的共享单车管理系统小程序系统的设计和实现

基于SSM框架的共享单车管理系统小程序系统的设计和实现 源码传送入口前言主要技术系统设计功能截图Lun文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码传送入口 前言 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,…

react之Component存在的2个问题

问题 只要执行setState(),即使不改变状态数据,组件也会重新render()只当前组件重新render(),就会自动重新render子组件 原因 Component中的shouldComponentUpdate()总是返回true 思路 只有当组件的state或props数据发生改变时才重新rend…

适合汽车应用的MAX49017ATA/VY、MAX40025AAWT、MAX40025CAWT、MAX40026ATA/VY(线性)微功耗比较器

一、MAX49017ATA/VY 内置基准电压源的1.7V、双通道微功耗比较器 MAX49017是一款节省空间的双通道比较器,内置基准电压源,提供推挽输出。该器件通过了AEC-Q100认证,非常适合汽车应用,例如汽车电池监控系统、信息娱乐系统音响主机和…

Docker - 概述

Docker概述 Docker概述Docker安装Docker命令 镜像命令容器命令操作命令 … Docker镜像容器数据卷DockerFileDocker网络管理IDEA整合DockerDocker ComposeDocker Swarm 简化版的K8s Docker为什么出现? 传统的项目部署,环境配置是十分麻烦,第…
最新文章