前端require.context()的使用

require.context()

require.context(directory,useSubdirectories,regExp),接收三个参数

  • directory:说明需要检索的目录
  • useSubdirectories:是否检索子目录
  • regExp: 匹配文件的正则表达式,一般是文件名

require.context返回一个require 函数,函数有三个属性:resolve 、keys、id。

  • resolve: 是一个函数,他返回的是被解析模块的id ,接受一个参数request。
  • keys: 也是一个函数,他返回的是一个数组,该数组是由所有可能被上下文模块解析的请求对象组成。
  • id:上下文模块的id

应用的场景

1.如果页面需要导入多个组件时,一般的写法:

import aaa from '@/components/example/aaa'
import bbb from '@/components/example/bbb'
import ccc from '@/components/example/ccc'
import ddd from '@/components/example/ddd'
components:{
aaa,
bbb,
ccc,
ddd,
}

但是使用require.context()时的写法就简洁了许多

const path = require('path')
const files = require.context('@/components/example', false, /\.vue$/)
const modules = {}
files.keys().forEach(key => {
   const name = path.basename(key, '.vue')
    // 提取出用 ‘/' 隔开的path的最后一部分,path.basename(p, [ext])。 p要处理的path,ext要过滤的字符
   modules[name] = files(key).default || files(key)
})
components:modules

2.在store下创建一个modules文件夹,里面放置的是各个模块的state,mutaions…,可以使用它直接进行全部引入,模块名就是文件的名称,方便后续直接添加:

下面这段代码放在store下的index.js里面

const files = require.context("./modules", false, /\.js$/);
const modules = {};
files.keys().forEach((key) => {
   modules[key.replace(/(\.\/|\.js)/g, "")] = files(key).default;
});
export default new Vuex.Store({
state:{},
mutaions:{},
modules  //这个modules就是上面引入之后所有的模块
})

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值