require.context()函数介绍

news2024/12/24 11:31:54

业务需求:

  • 前端Vue项目怎样读取src/assets目录下所有jpg文件

  • require.context()方法来读取src/assets目录下的所有.jpg文件
<template>
  <div>
    <img v-for="image in images" :src="image" :key="image" />
  </div>
</template>
 
<script>
export default {
  data() {
    return {
      images: []
    };
  },
  created() {
    this.loadImages();
  },
  methods: {
    loadImages() {
      // 使用require.context()读取static目录下的所有.jpg文件
      const context = require.context('@/assets', true, /\.jpg$/);
      this.images = context.keys().map(key => context(key));
    }
  }
};
</script>

在这个例子中,require.context()函数的第一个参数是要扫描的目录,第二个参数指示是否应该包括子目录,第三个参数是用来匹配文件的正则表达式。context.keys()返回匹配文件的相对路径数组,然后通过映射每个键到context()函数,我们得到了图片的URL数组。这个数组被赋值给images数据属性,然后在模板中循环展示每个图片。

require.context()函数详解 

require.context Webpack (所有用时保证项目安装webpack相关库提供的一个功能,用于在编译时创建一个上下文(context),从而允许你动态地加载模块。这在处理大型项目时特别有用,可以帮助你自动化地导入模块,而无需手动列出所有文件

require.context(directory, useSubdirectories = false, regExp = /^\.\/.*$/, mode = 'sync')
  • directory:需要检索的目录。
  • useSubdirectories:是否检索子目录。
  • regExp:匹配文件的正则表达式。
  • mode:加载模式,可以是 'sync'(同步),'lazy'(懒加载)或 'eager'(急加载)。

 在 Vue 中的应用场景

自动化全局组件注册

使用 require.context 来动态加载 components 目录中的所有组件

​
const requireComponent = require.context(
  // 组件目录的相对路径
  './components',
  // 是否查询其子目录
  false,
  // 匹配基础组件文件名的正则表达式
  /[A-Z]\w+\.(vue|js)$/
)

requireComponent.keys().forEach(fileName => {
  // 获取组件配置
  const componentConfig = requireComponent(fileName)

  // 获取组件的 PascalCase 命名
  const componentName = fileName
    .split('/')
    .pop()
    .replace(/\.\w+$/, '')

  // 全局注册组件
  Vue.component(
    componentName,
    // 如果这个组件选项是通过 `export default` 导出的,
    // 那么就会优先使用 `.default`,
    // 否则回退到使用模块的根。
    componentConfig.default || componentConfig
  )
})

​

在 Vue 项目中,通常有许多全局组件。使用 require.context 可以自动导入这些全局组件,而不需要每次手动导入和注册

按需加载路由

在大型项目中,可以使用 require.context 动态创建路由,特别是当有许多模块化的页面组件时。

// src/router/index.js
import Vue from 'vue'
import Router from 'vue-router'

Vue.use(Router)

const requireRoute = require.context(
  // 路由配置目录的相对路径
  './routes',
  // 是否查询其子目录
  false,
  // 匹配路由配置文件名的正则表达式
  /\.js$/
)

const routes = requireRoute.keys().map(fileName => requireRoute(fileName).default)

export default new Router({
  routes
})

自动化 Vuex 模块导入

如果你的 Vuex 状态管理包含许多模块,使用 require.context 可以自动导入这些模块。

// src/store/index.js
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

const requireModule = require.context(
  // Vuex 模块目录的相对路径
  './modules',
  // 是否查询其子目录
  false,
  // 匹配基础模块文件名的正则表达式
  /\.js$/
)

const modules = requireModule.keys().reduce((modules, fileName) => {
  const moduleName = fileName.replace(/^\.\/(.*)\.\w+$/, '$1')
  const value = requireModule(fileName)
  modules[moduleName] = value.default
  return modules
}, {})

export default new Vuex.Store({
  modules
})

总结

require.context 是一个非常强大的工具,可以在 Vue 项目中简化模块的导入和注册流程。通过动态加载模块,开发者可以减少重复代码,提高开发效率,特别是在大型项目中,自动化导入组件、路由和 Vuex 模块可以显著提升项目的可维护性和扩展性。

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

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

相关文章

Vision-LSTM: xLSTM 作为通用视觉主干

摘要 尽管Transformer最初是为自然语言处理引入的&#xff0c;但它现在已经被广泛用作计算机视觉中的通用主干结构。最近&#xff0c;长短期记忆&#xff08;LSTM&#xff09;已被扩展为一种可扩展且性能优越的架构——xLSTM&#xff0c;它通过指数门控和可并行化的矩阵内存结…

用函数指针求a和b中的大者

指针变量也可以指向一个函数。一个函数在编译时被分配给一个入口地址。这个函数入口地址就称为函数的指针。可以用一个指针变量指向函数&#xff0c;然后通过该指针变量调用此函数。 先按一般方法编写程序&#xff1a; 可以用一个指针变量指向max函数&#xff0c;然后通过该指…

不能访问huggingface、与GPU配置

不能访问huggingface解决方法 如果是从 huggingface.co 下载模型&#xff0c;由于国内不能访问&#xff0c;所以建议先配置一下环境变量&#xff0c; 通过访问国内镜像站点 https://hf-mirror.com来下载模型。 &#xff08;1&#xff09;Linux系统设置环境变量&#xff1a; e…

STM32引脚外部中断和外部事件模式的区别

STM32引脚外部中断和外部事件模式的区别 STM32引脚模式外部中断和外部事件模式的区别&#xff1a; (以 GPIO_MODE_IT_FALLING 和 GPIO_MODE_EVT_FALLING 为例) GPIO_MODE_IT_FALLING 能够触发中断&#xff0c;用在中断方式编程。GPIO_MODE_EVT_FALLING 只设置中断标志位&…

vue3 基于el-tree增加、删除节点(非TypeScript 写法)

话不多说&#xff0c;直接贴代码 <template><div class"custom-tree-container"><!-- <p>Using render-content</p><el-tree style"max-width: 600px" :data"dataSource" show-checkbox node-key"id" …

【C语言初阶】分支语句

&#x1f31f;博主主页&#xff1a;我是一只海绵派大星 &#x1f4da;专栏分类&#xff1a;C语言 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、什么是语句 二、if语句 悬空else 三、switch语句 default 四、switch语句与if-else语句性能对比如何&#xff1f…

boot整合solr

换了新项目组&#xff0c;技术相对老些&#xff0c;于是用boot框架简单记录下&#xff01; 安装 下载路径&#xff1a;https://solr.apache.org/downloads.html Windows环境 下载solr-8.2.0.zip包并解压缩&#xff0c;以管理员身份打开cmd&#xff0c;执行 solr cmd 命令启…

WordPress 高级缓存插件 W3 Total Cache Pro 详细配置教程

说起来有关 WordPress 缓存插件明月已经发表过不少文章了,但有关 W3 Total Cache Pro 这个 WordPress 高级缓存插件除了早期【网站缓存插件 W3 Total Cache,适合自己的才是最好的!】一文后就很少再提及了,最近因为明月另一个网站【玉满斋】因为某些性能上的需要准备更换缓存…

微服务中调用common模块中的工具类

首先查看common类中的pom文件中的信息 然后再在所需要使用的微服务模块中进行注入 就可以使用其中的工具类了

pyqt opengl 小黑块

目录 OpenGLWidget_g初始化函数&#xff1a; 解决方法&#xff1a;把初始化函数的parent去掉 pyqt opengl 小黑块 原因&#xff1a; 创建OpenGLWidget_g的时候把main_window作为父类&#xff08;self&#xff09;传进去了&#xff0c; self.opengl_widget OpenGLWidget_g(…

前端nvm的安装和使用nodejs多版本管理2024

nvm的安装和使用 1、简介 nvm是一个管理nodejs版本的工具。在实际的开发中&#xff0c;项目的开发依赖需要的nodejs版本运行环境不同&#xff0c;此时我们就需要使用nvm来进行不同nodejs版本的切换。其实就是一个方便的node版本管理工具。 注意&#xff1a;如果有安装过node&a…

PySpark教程(001):基础准备与数据输入

PySpark 学习目标 了解什么是Spark、PySpark了解为什么学习PySpark了解如何和大数据开发方向进行衔接 Spark是什么&#xff1f; Apache Spark是用于大规模数据处理的统一分析引擎。 简单来说&#xff0c;Spark是一款分布式的计算框架&#xff0c;用于调度成百上千的服务器…

算法设计与分析(5题Python版)

1、阿里巴巴走进了装满宝藏的藏宝洞。藏宝洞里面有N堆金币&#xff0c;第i堆金币的总重量和总价值分别是m,v。阿里巴巴有一个承重量为T的背包&#xff0c;但并不一定有办法将全部的金币都装进去。 他想装走尽可能多价值的金币&#xff0c;所有金币都可以随意分割&#xff0c;分…

攻防世界---misc---Excaliflag

1、题目描述&#xff0c;下载附件是一张图片 2、用winhex分析&#xff0c;没有发现奇怪的地方 3、在kali中使用binwalk -e 命令&#xff0c;虽然分离出来了一些东西&#xff0c;但是不是有用的 4、最后用stegsolve分析&#xff0c;切换图片&#xff0c;发现有字符串&#xff0c…

tcp协议中机制的总结

目录 总结 分析 三次握手 总结 分析 其中,序列号不止用来排序,还可以用在重传时去重 确认应答是机制中的核心 因为都需要依靠应答来拿到协议字段,从而判断是否触发机制 保证可靠性的策略也可以提高效率,比如: 流量控制,可以根据多个因素来动态调整数据发送量拥塞控制也是,让…

XSS(跨站脚本攻击)

1.什么是xss XSS全称&#xff08;Cross Site Scripting&#xff09;跨站脚本攻击&#xff0c;为了避免和CSS层叠样式表名称冲突&#xff0c;所以改为了 XSS&#xff0c;是最常见的Web应用程序安全漏洞之一,XSS是指攻击者在网页中嵌入客户端脚本&#xff0c;通常是JavaScript编写…

两句话让LLM逻辑推理瞬间崩溃!!

一道简单的逻辑问题&#xff0c;竟让几乎所有的LLM全军覆没&#xff1f; 对于人类来说&#xff0c;这个名为「爱丽丝梦游仙境」&#xff08;AIW&#xff09;的测试并不算很难—— 「爱丽丝有N个兄弟&#xff0c;她还有M个姐妹。爱丽丝的兄弟有多少个姐妹&#xff1f;」 稍加思考…

Git发布正式

一般我们开发都是在测试环境开发&#xff0c;开发完成后再发布到正式环境。 一.分支代码合并到主分支1.首先切换到自己的分支(比如分支叫&#xff1a;dev)git checkout dev2.把本地分支拉取下来git pull 或者 git pull origin dev3.切换到主分支mastergit checkout master4.更新…

Unity | Shader基础知识(番外:了解内置Shader-Standard<二>)

目录 前言 一、Standard参数详解 1.NormalMap法线贴图 2.HeightMap高度贴图 3.Occlusion遮挡贴图 4.DetailMask细节遮挡 5.Emission自发光 6.Tiling铺地砖和Offset偏移度 二、作者的碎碎念 前言 Unity | Shader基础知识(番外&#xff1a;了解内置Shader-Standard&#x…

在WSL2下配置Pytorch(Linux+Anaconda+PyTorch-GPU)

之前使用过双系统、虚拟机的ubunutu 效果都不是很好&#xff0c;要么切换系统太麻烦&#xff0c;要么太卡顿 最近在尝试WSL子系统&#xff0c;没有想到还是有很多坑 记录一下配置的过程 一、NVIDIA显卡的安装 因为WSL和Windows的显卡驱动不能互通&#xff0c;所以在子系统上需…