自动加载路由-webpack require.context

vue项目中,每添加一个模块都需要去引入并注册到路由表中,webpack中的require.context这个API将会解决这个问题,大大提升了我们的工作效率。

不妨去看看我们的路由表,三四个模块就需要200行以上的代码量,而且我增加一个模块就需要再次注册一遍,冗余的代码太多太多了。

首先,我们来看看require.context是什么???

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

怎么用呢???

require.context接收三个参数,分别为路径、是否遍历子目录、查找正则

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

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

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

语法: require.context(directory, useSubdirectories = false, regExp = /^.//);

接下来我们看一下APi给我们返回了什么?

 

  1. resolve {Function} -接受一个参数request,requesttest文件夹下面匹配文件的相对路径,返回这个匹配文件相对于整个工程的相对路径
  2. id {String} -匹配的文件夹的相对于工程的相对路径,是否遍历子目录,匹配正则组成的字符串,应该是热加载用到
  3. keys {Function} -返回匹配成功模块的名字组成的数组(我们需要的)

最后,把他放到我们的项目中去运行起来

import Vue from 'vue'
import Router from 'vue-router'

let routes = []

// // require.context(directory, useSubdirectories = false, regExp = /^.//); 路径+是否遍历子目录+匹配正则

const routeFiles = require.context('@/views', true, /\.vue/) // 读取views文件夹下面所有的.vue文件
console.dir(routeFiles)
routeFiles.keys().forEach(item => {
  // console.log(item)
  if (item.indexOf('component') === -1) { // component下面为子组件不需要注册路由
    let info = item.split('.')
    // console.log(info)
    routes.push({
      path: info[1],
      component: routeFiles(item).default
    })
    // console.log(exArr)
  }
})

// console.dir(routes)
Vue.use(Router)

export default new Router({
  routes
})

 至此,项目中新增模块就可以实现自动加载了。。。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值