require.context()函数介绍

业务需求:

  • 前端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 模块可以显著提升项目的可维护性和扩展性。

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

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

相关文章

一篇文章搞定Java数组初始化,从此告别迷惑

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

Java:集合框架

1.Collection接口 collection接口是Java最基本的集合接口&#xff0c;它定义了一组允许重复的对象。它虽然不能直接创建实例&#xff0c;但是它派生了两个字接口List和Set&#xff0c;可以使用子接口的实现类创建实例。Collection 接口是抽取List接口和Set接口共同的存储特点和…

2024.6.10学习记录

1、代码随想录二刷 2、项目难点 review 3、计组复习

6-Maven的使用

6-Maven的使用 常用maven命令 //常用maven命令 mvn -v //查看版本 mvn archetype:create //创建 Maven 项目 mvn compile //编译源代码 mvn test-compile //编译测试代码 mvn test //运行应用程序中的单元测试 mvn site //生成项目相关信息的网站 mvn package //依据项目生成 …

线程知识点总结

Java线程是Java并发编程中的核心概念之一&#xff0c;它允许程序同时执行多个任务。以下是关于Java线程的一些关键知识点总结&#xff1a; 1. 线程的创建与启动 继承Thread类&#xff1a;创建一个新的类继承Thread类&#xff0c;并重写其run()方法。通过创建该类的实例并调用st…

代码随想录算法训练营第三十二天| 122.买卖股票的最佳时机II,55. 跳跃游戏 ,45.跳跃游戏II

122. 买卖股票的最佳时机 II - 力扣&#xff08;LeetCode&#xff09; class Solution {public int maxProfit(int[] prices) {if(prices.length 0){return 0;}int min prices[0];int result 0;for(int i1;i<prices.length;i){if(prices[i] > min){result (prices[i]…

【SQL】牛客网SQL非技术入门40道代码|练习记录

跟着刷题&#xff1a;是橘长不是局长哦_哔哩哔哩_bilibili 6查询学校是北大的学生信息 select device_id, university from user_profile where university 北京大学 7查找年龄大于24岁的用户信息 select device_id, gender, age, university from user_profile where age…

【C++初阶学习】第十三弹——优先级队列及容器适配器

C语言栈&#xff1a;数据结构——栈(C语言版)-CSDN博客 C语言队列&#xff1a;数据结构——队列&#xff08;C语言版&#xff09;-CSDN博客 C栈与队列&#xff1a;【C初阶学习】第十二弹——stack和queue的介绍和使用-CSDN博客 前言&#xff1a; 在前面&#xff0c;我们已经…

使用 C# 学习面向对象编程:第 1 部分

介绍 C# 完全基于面向对象编程 (OOP)。首先&#xff0c;类是一组相似的方法和变量。在大多数情况下&#xff0c;类包含变量、方法等的定义。当您创建此类的实例时&#xff0c;它被称为对象。在此对象上&#xff0c;您可以使用定义的方法和变量。 步骤1. 创建名为“LearnClass…

⌈ 传知代码 ⌋ 记忆大师

&#x1f49b;前情提要&#x1f49b; 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间&#xff0c;对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…

从信号灯到泊车位,ARMxy如何重塑城市交通智能化

城市智能交通系统的高效运行对于缓解交通拥堵、提高出行安全及优化城市管理至关重要。ARMxy工业计算机&#xff0c;作为这一领域内的技术先锋&#xff0c;正以其强大的性能和灵活性&#xff0c;悄然推动着交通管理的智能化升级。 智能信号控制的精细化管理 想象一下&#xff0…

[发布]嵌入式系统远程测控软件-基于Qt

目录 一. 引言二. 软件功能2.1 原理2.2 软件功能2.3 运行环境 三. 软件操作使用3.1 软件界面3.2 软件功能使用详解3.2.1 连接3.2.2 数据监测3.2.3 数据修改3.2.4 数据保存 3.3 软件的硬件连接 四. 通信协议——STM32移植篇4.1 通信协议4.2 STM32如何传输浮点数4.3 简单移植&…

使用Redis的优势以及会引发的问题

优势 ①使用redis代表着高性能还有高并发&#xff0c;高性能很好理解&#xff0c;redis会缓存我们访问的数据。他是基于内存的&#xff0c;第一次访问数据库我们可能需要800ms&#xff0c;但是访问后如果使用redis进行缓存&#xff0c;第二次乃至后面访问相同的数据就只需要去…

嵌入式仪器模块:示波器模块和自动化测试软件

示波器模块 • 32 位分辨率 • 125 MSPS 采样率 • 支持单通道/双通道模块选择 • 低速模式可实现实时功率分布和整机功率检测 • 高速模式可实现信号分析和上电时序测量 应用场景 • 抓取并分析波形的周期、幅值、异常信号等指标 • 电源纹波与噪声分析 • 信号模板比…

档案数字化管理的工具有哪些

档案数字化管理的工具可以包括以下几种&#xff1a; 1. 扫描仪/数字拍摄仪&#xff1a;用于将纸质文件数字化为电子文件的工具。 2. OCR&#xff08;光学字符识别&#xff09;软件&#xff1a;用于将扫描或拍摄的图像文件转换为可编辑的文本文件。 3. 文件管理系统/专久智能电子…

RAG检索与生成的融合

1、rag定义 检索增强生成 (RAG) 模型代表了检索系统和生成模型两大不同但互补组件完美结合的杰作。通过无缝整合相关信息检索和生成与背景相关的响应&#xff0c;RAG模型在人工智能领域达到了前所未有的复杂程度。 2、rag工作流程 2.1、rag整体框架 query通过llm处理后&…

doris FE 在Windows环境下编译调试开发环境

前言&#xff1a; doris fe 在win下调试运行&#xff0c;和正常java项目有一些差异&#xff0c;主要是有与be&#xff08;c&#xff09;通信代码的生成 在win环境下不能直接生成&#xff0c;因此需要现在linux下生成之后&#xff0c;再拷贝到本地来&#xff0c;然后进行编译&a…

王学岗鸿蒙开发(北向)——————(十三)音乐播放器

AudioRenderer适合录音 AVPlayer:简单的本地单曲播放 MP3文件放置的地方 import media from ohos.multimedia.media import common from ohos.app.ability.common; Entry Component struct Index {//第1步&#xff1a;avPlayer:media.AVPlayer nullasync onPageShow(){//第…

665. 非递减数列(中等)

665. 非递减数列 1. 题目描述2.详细题解3.代码实现3.1 Python3.2 Java 1. 题目描述 题目中转&#xff1a;665. 非递减数列 2.详细题解 判断在最多改变 1 个元素的情况下&#xff0c;该数组能否变成一个非递减数列&#xff0c;一看到题目&#xff0c;不就是遍历判断有几处不…

解决阿里云的端口添加安全组仍然无法扫描到

发现用线上的网站扫不到这个端口&#xff0c;这个端口关了&#xff0c;但是没有更详细信息了 我用nmap扫了一下我的这个端口&#xff0c;发现主机是活跃的&#xff0c;但是有防火墙&#xff0c;我们列出云服务器上面的这个防火墙list&#xff0c;发现确实没有5566端口 参考&a…