zoukankan      html  css  js  c++  java
  • webpack的require.context()实现路由“去中心化”管理

    最近在开发一个大型vue单页面应用的时候,项目最初是将所有的路由写在一个router.js的文件里。

    const router = new Router({
      mode: "history",
      routes: [{
          path: '/',
        name: 'Index',
        component: include('index', 'home')
      },
      {
        path: '/aboutus',
        name: 'aboutUs',
        component: include('aboutUs', 'home')
      },
      {
        path: '/feedback',
        component: include('feedback', 'home'),
        redirect: '/feedback/service',
        children: [{
          path: '/feedback/service',
          component: include('Service', 'home/feedback'),
        },
        {
          path: '/feedback/view',
          component: include('view', 'home/feedback'),
        }]
      }]
    }
    随着业务代码的增长路由很快就会嵌套更深,新增很多路由,这样不利于后续的代码维护。

    然而require.context()是什么?

    想要实现去中心化管理我们就需要使用到require.context()

    然后有了require.context()这个方法,我们就可以通过正则匹配引入相应的文件模块。

    require.context(directory, useSubdirectories, regExp)

    require.context()有三个参数:

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

    使用require.context()改造后的allRouters.js文件

    示例:

    const routes = require.context('@/view', true, /router.js$/)
    // (你创建了)一个view文件夹下面(不包含子目录),能被require请求到,所有文件名以 .router.js 结尾的文件形成的上下文(模块)。
     
    export default routes.keys().map(key => (routes(key).default || routes(key)))

    以后只要业务模块route文件遵循统一的目录结构,业务模块route就能被自动关联到这个allRouters.js里。

    然后在route下index.js里引入
    import Vue from 'vue'
    import Router from 'vue-router'
    import allRouters from './allRouters'
    Vue.use(Router)
    export function createRouter () {
      const router = new Router({
        'mode': 'history',
        'routes': [
        ...allRouters
        ]
      })
    }...等等其他操作

    这个思路也可应用于其他想要实现"去中心化"管理的功能模块,比如vuex的store模块。  

  • 相关阅读:
    (转载) 天梯赛 L2-018. 多项式A除以B
    天梯赛 L2-007. (并查集) 家庭房产
    天梯赛 L2-013. (并查集) 红色警报
    天梯赛 L2-002. (模拟) 链表去重
    28. Implement strStr() (C++)
    27. Remove Element(C++)
    26. Remove Duplicates from Sorted Array(C++)
    19. Remove Nth Node From End of List(C++)
    21. Merge Two Sorted Lists(C++)
    20. Valid Parentheses(C++)
  • 原文地址:https://www.cnblogs.com/ympjsc/p/10049943.html
Copyright © 2011-2022 走看看