vue 主路由优化

681 阅读1分钟

主要原理:使用webpack 的 require.context()API

假设demo中有两个模块,home和login


1.在项目router文件夹下面新增 home.router.js 和 login.router.js 进行分区 

大致内容:

export default {  path: '/home',  redirect: '/home',  component: () => import('@/views/layout'),  meta: {    //路由的排序会根据该权限码的大小进行升序排序
    role: [10000],    title: '首页'  },  children: [    {      path: '',      name: 'home',      component: () => import('@/views/home/index'),      meta: {        title: '平台首页',        icon: 'iconfont icon-shouye',        role: [11000],      },    },  ],}

2.在router文件夹的主路由文件夹中批量引入分区路由

大致内容:

import Vue from 'vue'import Router from 'vue-router'Vue.use(Router)let routerList = []function importAll (r) {  r.keys().forEach(   //r(key).default 是因为分区路由导出时采用 export default 
   (key) => routerList.push(r(key).default)  )}importAll(require.context('.', false, /\.router\.js/))// 按照权限码排序routerList = routerList.sort((a, b) => { return a.meta.role[0] - b.meta.role[0] })export const asyncRoutes = [...routerList]export default new Router({  mode: 'history',  base: '',  routes: asyncRoutes})


总结:该方法的好处在于,降低大型项目的路由复杂度,对路由进行分区管理,便于维护和迭代。

以上路由虽然添加了权限码,但是并没有做静态路由和动态路由的区分,如果项目需要进行权限判断时,只需要对分区路由文件进行区分,比如静态路由分区文件以 crouter.js结尾,动态路由分区文件以arouter.js结尾,在主路由中引入分区路由文件时,分两次执行importAll()方法,只需要修改两次执行时的正则就可以分别导入两种路由。

在需要频繁import的情况下,可以尝试合理使用该方法!