美文网首页
使用require.context导入多个模块

使用require.context导入多个模块

作者: Lee拔山兮 | 来源:发表于2020-11-11 16:07 被阅读0次

使用契机

将API接口文件分模块存放后需要导入统一的入口文件再统一导出,然后在main.js中引用。看着分门别类的接口文件很舒服,但是文件一多,导入统一入口文件index.js就显得很繁琐。效果如下:

76da31964bce1579.png
44989b9516d6df61.png
e18f9f04cb0884cf.png

说实话,这个看着越看越反人类。所以决定用更简洁的require.context来处理这个问题。

require.context

require.context是一个webpackapi,通过执行require.context函数获取一个特定的上下文,主要用来实现自动化导入模块,在前端工程中,如果遇到从一个文件夹引入很多模块的情况,可以使用这个api,它会遍历文件夹中的指定文件,然后自动导入,使得不需要每次显式的调用import导入模块

require.context函数接受三个参数

  • directory {String} -读取文件的路径

  • useSubdirectories {Boolean} -是否遍历文件的子目录

  • regExp {RegExp} -匹配文件的正则

webpack官网给出的例子是这样的:

require.context('./test', false, /.test.js$/)

开始使用

首先根据需要让require.context遍历/src/api目录。遍历的过程中肯定会把index.js也遍历进去,因为不想之后来处理遍历后的结果,所以先粗暴的用名称区分。

我将以前的模块名.js改成为了模块名.api.js。

f57afe8c22ddd303.png

接着开始编写一个导入函数来处理require.context返回的结果。

// importAllModule.js

/**
 * @description 批量导入API
 * @param {Object} context 上下文对象
 * @param {RegExp} reg 匹配规则
 * @returns {Object} 对象
 */
function importAllModule(context, reg) {
    const map = {}
    let tmp = {}
    for (let key of context.keys()) {
        const keyArr = key.split('/')
        keyArr.shift()
        map[keyArr.join('.').replace(reg, '')] = context(key).default
    }
    for (let key in map) {
        tmp = {
            ...tmp,
            ...map[key]
        }
    }
    return tmp
}

export default importAllModule 

接着在index.js中导入importAllModule.js并调用导入函数。

// index.js  

import importAllModule from '../common/js/importAllModule'

const api = importAllModule(require.context('api', true, /\.api.js$/), /\.api.js$/g)

export default api

结语

经过require.context的改造,大大解放了生产力。首先是index.js变得更加的简洁和可维护。其次,只要按格式编写API文件的文件名,就会被require.context遍历到并导入到index.js中。

相关文章

  • 使用require.context导入多个模块

    使用契机 将API接口文件分模块存放后需要导入统一的入口文件再统一导出,然后在main.js中引用。看着分门别类的...

  • vue使用技巧

    1.require.context() 父组件中导入多个组件 使用require.context() api描述:...

  • vue动态组件& 动态import 组件

    component 使用场景: 多个组件之间进行切换 require.context() 使用场景:手动引入多个组件

  • import.meta.globEager 代替 require

    在使用vite 时,发现不能使用require.context 自动导入modules,可以使用import.me...

  • python找茬系列06--import ...和from ..

    一、语法区别 二、实例 1、import Module ①不使用别名 ②使用别名 ③导入多个模块 输出结果: 2、...

  • import.meta.glob批量引入文件

    Glob 导入 Vite 支持使用特殊的 import.meta.glob 函数从文件系统导入多个模块: 以上将会...

  • python学习第五天

    将类导入到模块中,所有功能依旧可以使用,而且让主程序简洁、易读。 从一个模块中导入多个类:from 模块名 imp...

  • 12python 类和模块

    1.导入单个类 2.从一个模块中导入多个类可以在一个模块中存储多个类,那么导入类的时候就可以导入多个类 3.导入整...

  • Python 导入Import模块和包

    任何语言使用已封装好的模块(或库)都要先进行导入,Python使用import关键字导入模块。 如何导入 导入模块...

  • Vite 2 + Vue 3 实现批量导入模块

    当项目使用 webpack 作为构建工具时,批量导入可以用require.context实现 ➡️ 【利用 web...

网友评论

      本文标题:使用require.context导入多个模块

      本文链接:https://www.haomeiwen.com/subject/broebktx.html