利用webpack的 require.context api进行自动导入

require.context api及参数介绍

require.context(dir, useSubdir, regExp)
参数dir:用于动态加载的目录
参数useSubDir:是否对dir指定的子目录进行自动导入, type=boolean
参数regExp:匹配文件的正则表达式,可以在文件中加入特定的字符,按照特定的字符去加载对应的文件

eg: require.context( '.', false, /-route.js$/ )
自动加载当前文件中以-route.js结尾的文件,对子目录不加载

require.context 函数执行后返回一个函数,并且这个函数有三个属性

  • keys 这个属性是一个函数,返回匹配成功模块的名称组成的数据,数组中的每一项就是每个文件的路径(相对于dir这个参数指定的相对路径)
  • resolve 这个属性也是一个函数,它接收一个keys()执行之后数组项的参数,返回该参数对应文件相对于整个项目的相对路径(相对于项目根目录的相对路径)
  • id 执行环境的id

require.context函数执行后返回的函数接收一个参数

参数形式为keys函数执行后的数组项,接收参数执行后就拿到了对应文件中的内容

完整示例:

// 自动导入的两个文件示例
// 文件一
import { lazy } from 'react';
const ComOne = lazy(() => import('../views/day3/ComOne'));  

const publicRoutes = [
    {
        path: '/comone',
        component: ComOne,
        exact: true
    } 
];
export default publicRoutes;

// 文件二
import { lazy } from 'react';
const ComTwo = lazy(() => import('../views/day3/ComTwo')); 

const publicRoutes = [
    {
        path: '/comtwo',
        component: ComTwo,
        exact: true
    }
];
export default publicRoutes;

// 自动导入文件
const files = require.context( '.', false, /-route.js$/ ); 
let routes = [];
files.keys().forEach((item)=>{ 
    // 这里的default依据文件一和文件二中的导出方式而定 
    const _routes = files(item).default; 
    // 下面的为业务代码,根据自己的需求而定
    if(Array.isArray(_routes) && _routes.length){
        routes = routes.concat(_routes);  
    }
})

export default routes; 
2 声望
2 粉丝
0 条评论
推荐阅读
正则原理剖析
回溯法也称试探法,它的基本思想是:从问题的某一种状态(初始状态)出发,搜索从这种状态出发所能达到的所有“状态”,当一条路走到“尽头”的时候(不能再前进),再后退一步或若干步,从另一种可能“状态”出发,继...

闲人阅读 560

ESlint + Stylelint + VSCode自动格式化代码(2023)
安装插件 ESLint,然后 File -> Preference-> Settings(如果装了中文插件包应该是 文件 -> 选项 -> 设置),搜索 eslint,点击 Edit in setting.json

谭光志34阅读 20.7k评论 9

涨姿势了,有意思的气泡 Loading 效果
今日,群友提问,如何实现这么一个 Loading 效果:这个确实有点意思,但是这是 CSS 能够完成的?没错,这个效果中的核心气泡效果,其实借助 CSS 中的滤镜,能够比较轻松的实现,就是所需的元素可能多点。参考我们...

chokcoco24阅读 2.2k评论 3

你可能不需要JS!CSS实现一个计时器
CSS现在可不仅仅只是改一个颜色这么简单,还可以做很多交互,比如做一个功能齐全的计时器?样式上并不复杂,主要是几个交互的地方数字时钟的变化开始、暂停操作重置操作如何仅使用 CSS 来实现这样的功能呢?一起...

XboxYan25阅读 1.7k评论 1

封面图
在前端使用 JS 进行分类汇总
最近遇到一些同学在问 JS 中进行数据统计的问题。虽然数据统计一般会在数据库中进行,但是后端遇到需要使用程序来进行统计的情况也非常多。.NET 就为了对内存数据和数据库数据进行统一地数据处理,发明了 LINQ (L...

边城17阅读 2k

封面图
【代码鉴赏】简单优雅的JavaScript代码片段(一):异步控制
Promise.race不满足需求,因为如果有一个Promise率先reject,结果Promise也会立即reject;Promise.all也不满足需求,因为它会等待所有Promise,并且要求所有Promise都成功resolve。

csRyan26阅读 3.3k评论 1

「彻底弄懂」this全面解析
当一个函数被调用时,会创建一个活动记录(有时候也称为执行上下文)。这个记录会包含函数在 哪里被调用(调用栈)、函数的调用方法、传入的参数等信息。this就是记录的其中一个属性,会在 函数执行的过程中用到...

wuwhs17阅读 2.4k

封面图
2 声望
2 粉丝
宣传栏