【Webpack】前端工程自动化 - require.context实现模块自动化导入

news2025/1/10 1:31:40

一、介绍

  • require.context 是基于 webpack 的一个的 api,主要用来实现模块的自动化导入
  • 在前端工程中,如果遇到一个文件需要引入很多模块的情况,可以使用这个api
  • require.context 会遍历文件夹中的指定文件,然后自动导入,这样就不需要每次显式的调用 import 来导入模块了
  • 如果想引入一个文件夹下面的所有文件,或者引入能匹配一个正则表达式的所有文件,这个功能就会很有帮助
  • 官网地址

二、require.context

  • require.context() 函数接收三个参数:

    • directory {String} :要搜索的目录(读取文件的路径)
    • useSubdirectories {Boolean} :一个标记,表示是否还搜索其子目录
    • regExp {RegExp} :匹配文件的正则表达式
  • require.context() 函数执行后返回的也是一个函数,该函数有三个属性:

    • resolve {Function} :接受一个参数 requestrequestdirectory {String} 目录下匹配文件的相对路径,返回这个匹配文件相对于 整个工程的 相对路径
    • keys {Function} :返回匹配成功文件的相对路径所组成的数组
    • id {String}context module 的模块 id ,它可能在你使用 module.hot.accept 时会用到

三、vue2批量导入并注册全局组件

1、需求

  • 将src/package文件夹下所有的.vue文件都注册为全局组件
    在这里插入图片描述

2、代码

<!--src/package/jzzf/check.vue-->
<template>
  <div>
    <h1>银行初审子组件</h1>
    <button @click="unityAudit">初审</button>
  </div>
</template>

<script>
export default {
  // name必须!!!
  name: "beijingCheck",
  data() {
    return {};
  },
  methods: {
    // 初审
    unityAudit() {
      alert("银行初审方法!!!");
    },
  },
};
</script>

<style></style>
// src/package/index.js
// 批量组件注册
const install = function (Vue) {
    // 读取package文件夹下的文件
    // const reqContext = requeire.context(要搜索的目录, 是否搜索其子目录, 匹配文件的正则表达式)
    const reqContext = require.context('./', true, /\.vue$/)
    // reqContext是一个function函数
    reqContext.keys().forEach((item) => {
        console.log(item);    // item: 文件路径
        console.log(reqContext(item).default)   // 导入的组件
        const com = reqContext(item).default
        // 全局注册组件
        Vue.component(com.name, com)
    })
    console.log(reqContext.id);
    console.log(reqContext.keys());
    // 经过实践发现, resolve函数的request参数的值是keys方法返回的数组的元素
    console.log(reqContext.resolve(reqContext.keys()[0]));
};

export default install; // 这个方法可以被Vue.use调用
  • src/package/index.js 输出打印内容如下:
    在这里插入图片描述
// src/main.js
import Vue from 'vue'
import App from './App.vue'
// 注册全局的组件
import comJs from '@/package/index.js'
Vue.use(comJs)

Vue.config.productionTip = false

new Vue({
  render: h => h(App),
}).$mount('#app')
  • 到这里src/package文件夹下的.vue文件就全部注册为全局组件了,可以直接使用了
// src/App.vue
<template>
  <div id="app">
    <!-- 使用注册好的全局组件 -->
    <beijingCheck/>
    <hr>
    <recheckTransfer/>
    <hr>
    <clearVoucherManage/>
  </div>
</template>

<script>
export default {
  name: 'App',
}
</script>

<style></style>

四、vue2路由模块自动加载

1、需求

  • vue 项目中,我们通常会把路由通过不同的功能划分成不同的模块,然后在 index.js 中一个个导入
  • 但是如果项目变大、路由特别多的时候,每次手动 import 就会变得很麻烦
  • 这时可以使用 require.context() 函数遍历 routes 文件夹的所有文件,一次性导入到 index.js 中,生成路由表
    在这里插入图片描述

2、代码

// src/router/routes/login.js
// 登录模块路由
export default {
  path: '/login',
  component: () => import('@/views/login')
}
// src/router/index.js
import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter)

// 路由模块自动加载
const moduleFn = require.context('./routes', false, /\.js$/i)
const routes = moduleFn.keys().reduce((prev, curr) => {
  let route = moduleFn(curr).default
  if (Array.isArray(route)) {
    prev.push(...route)
  } else {
    prev.push(route)
  }
  return prev
}, [])

const router = new VueRouter({
  mode: 'history',
  base: process.env.BASE_URL,
  routes
})

请添加图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

记一次redis主从切换导致的数据丢失与陷入只读状态故障

背景 最近一组业务redis数据不断增长需要扩容内存&#xff0c;而扩容内存则需要重启云主机&#xff0c;在按计划扩容升级执行主从切换时意外发生了数据丢失与master进入只读状态的故障&#xff0c;这里记录分享一下。 业务redis高可用架构 该组业务redis使用的是一主一从&am…

从“0”到“1”!低代码开发和云计算的碰撞,引领数字化转型浪潮!

随着互联网技术的飞速发展&#xff0c;数字化转型已经成为企业转型升级的必经之路。而在数字化转型的过程中&#xff0c;云计算和低代码开发逐渐成为新技术的代表&#xff0c;为企业提供更高效、更灵活的技术支持&#xff0c;让企业赢得更大的竞争优势。 云计算的发展 云计算是…

三阶段项目

DHCP分配不到冲突地址 需要重启 再分配 用这个命令 reset ip pool name vlan40 all ospf&#xff1a; 建立邻居表&#xff1a;报文&#xff1a;hello报文 状态&#xff1a;down int 2-way 选举DR 同步数据库&#xff1a;报文&#xff1a;DD-LSR-LSU-LSACK 状态&#xff…

C语言-printf打印%*s、%.*s与%-.*s的区别

一、简介 在平时的使用中&#xff0c;会经常使用到printf进行打印&#xff0c;而最长使用的方式是printf("%s",string)进行打印。但是有个问题&#xff0c;如果string结尾不是0。那么printf会继续打印&#xff0c;直到遇到0为止。这样就会有内存溢出的风险。显然&…

(三)ArcGIS空间数据的转换与处理——栅格数据变换

ArcGIS空间数据的转换与处理——栅格数据变换 目录 ArcGIS空间数据的转换与处理——栅格数据变换 1.地理配准2.平移3.扭曲4.旋转5.翻转6.重设比例尺7.镜像 数据变换是指对数据进行诸如放大、缩小、翻转、移动、扭曲等几何位置、形状和方位的改变等操作。对于 栅格数据的相应操…

类和对象 - 练习题(C++)

目录 1、求123...n 题目链接&#xff1a; 题目&#xff1a; 题目描述&#xff1a; 解题思路&#xff1a; 代码&#xff1a; 2 计算日期到天数转换 题目链接&#xff1a; 题目&#xff1a; 题目描述&#xff1a; 解题思路&#xff1a; 代码&#xff1a; 3 日期差值 题目链接&…

人工智能学习07--pytorch18--目标检测:Faster RCNN源码解析(pytorch)

参考博客&#xff1a; https://blog.csdn.net/weixin_46676835/article/details/130175898 VOC2012 1、代码的使用 查看pytorch中的faster-rcnn源码&#xff1a; 在pytorch中导入&#xff1a; import torchvision.models.detection.faster_rcnn即可找到faster rcnn所实现的源…

NIFI分页获取Postgresql数据到Hbase中_实际操作---大数据之Nifi工作笔记0049

首先看一下整体流程,可以看到这里用的PutHbaseJson处理器,把数据导入到 hbase中的 注意这里也可以使用PutSql导入数据,通过phoenix的jdbc驱动,然后把数据利用PutSql处理器导入到 Hbase中,但是我这里的时候报错了,然后一直没解决,所以最后用了PutHbaseJson处理器,把数据存入到…

【LinuxShell】linux防火墙之SNAT策略和DNAT策略

文章目录 前言一、SANT策略1.SNAT策略概述2.SNAT的典型应用环境3.SNAT的工作原理4.SNAT策略的应用SNAT转换前提条件SNAT策略打开方式SNAT实验过程 5.知识扩展 二、DNAT策略1.DNAT策略概述2.DNAT的典型应用环境3.DNAT的工作原理4.DNAT策略的应用DNAT转换前提条件DNAT地址转换方式…

linux管道通信原理

管道&#xff0c;通常指无名管道&#xff0c;是 UNIX 系统IPC&#xff08;InterProcess Communication)最古老的形式。 1、特点: 1.它是半双工的(即数据只能在一个方向上流动) &#xff0c;具有固定的读端和写端 2.它只能用于具有亲缘关系的进程之间的通信(也是子进程或者兄弟进…

python 读写 json,csv,txt,docx,xlsx,xls文件大全

目录 前言一、读写json1.1 读1.2 写1.2.1 list类型写入1.2.2 dict类型写入 二、读写csv2.1 读2.2 写2.2.1 list类型写入2.2.2 dict类型写入 三、读写txt3.1 读3.2 写按行写入&#xff08;手动添加换行符\n&#xff09;按行写入&#xff08;python添加换行符\n&#xff09;3.2.1…

Linux:Firewalld防火墙

Linux&#xff1a;Firewalld防火墙 一、Firewanlld防火墙概述二、Firewalld和Iptables的关系三、Firewalld网络区域3.1 Firewalld 区域的概念&#xff1a;3.2 firewalld防火墙预定义了9个区域3.3 firewalld数据处理流程 四、Firewalld防火墙的配置方法五、Firewalld-config图形…

RHCSA 8考题超级详细解析(2022最新版)本人已过

文章目录 1.配置IP地址2、配置软件仓库3、调试SELinux4、创建用户账户5. 配置cron计划任务6、创建共享目录7、配置NTP时间客户端8. auto自动挂载9、配置文件权限10、配置用户账户11、查找文件12、查找字符串13、 创建归档14、配置sudo提权15、设置密码默认策略16、配置umask值1…

海格里斯HEGERLS库架合一|仓储托盘四向穿梭车在冷库冷链行业中的应用

当前的物流行业正在从劳动密集型向技术密集型转变&#xff0c;物流系统越来越明显的向呈现出自动化、数字化、柔性化、智能化的发展趋势。以堆垛机为代表的自动化仓储系统&#xff0c;取货对场地要求比较高&#xff0c;多建在12M以上的新仓库。而对于不规则的、层高较低的老仓库…

【python资料】热图和Matplotlib.imshow()函数

一、说明 Matplotlib是一个强大的Python数据可视化库&#xff0c;可以绘制各种类型的图形&#xff0c;其中包括热图。热图通常用于表现数据的分布和趋势。本文用一个简单的例子&#xff0c;告诉大家用Matplotlib绘制热图的基本操作语句。 二、热图的概念 2.1 基本概念 热图&am…

7EBG-10-C-B-107EBG-20-B-B-10比例先导溢流阀放大板

7EBG-10-B-B-10、7EBG-20-C-B-10、7EBG-30-H-B-10、7EBG-10-C-B-10、7EBG-20-B-B-10、7EBG-30-C-B-10特性&#xff1a; ● 该阀是由高性能型比例先导式溢流阀和低噪音型溢流阀组合而成&#xff0c;进行压力与输入电流成比例的压力控制&#xff0c;能够达到无段式控制特性。 ●…

c++(内存管理)

本节目标&#xff1a; 1、c/c内存分布 2、c语言中动态内存管理方式 3、c中动态内存管理 4、operator new 与 operator delete函数 5、new和delete的实现原理 6、定位new表达式&#xff08;placement - new&#xff09; 7、常见面试题 目录 1.c/c内存分布 2、c语言中动…

StringRedisTemplate和RedisTemplate的区别

StringRedisTemplate和RedisTemplate的区别 springboot提供了两种redis访问工具类StringRedisTemplate和RedisTemplate&#xff0c;为什么spring官方会提供两种不同redis访问工具呢&#xff1f;两者主要的的区别在于redis的key和value的序列化方式不同&#xff0c;并且StringR…

手把手教你制作AI孙燕姿,让你的抖音视频火遍全网!

最近“AI孙燕姿”翻唱”的《发如雪》《爱在西元前》等歌曲在B站、抖音、快手等短视频平台爆火&#xff0c;截止到发稿前抖音的播放量已经超1700万。 目前AI孙燕姿制作教程资料较少&#xff0c;网上搜到几个都是使用开源项目Sovits来训练模型&#xff0c;使用门槛较高。 本文以…