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模块。  

  • 相关阅读:
    [原创]ASP.NET MVC调用美图秀秀开放平台拼图实现
    使用Lucene检索文档中的关键字
    Unitils+hibernate+Spring+PostgreSql做dao层测试遇到的错误
    初探IronJS
    IntelliJ IDEA 12 创建Web项目 教程 超详细版
    百度面试题:求绝对值最小的数
    jquery+css实现简单的评分功能
    Knockot JS 数字输入插件
    Diagnostic Policy Service 服务处于起不来
    WCF学习笔记(一) 之 开门见山
  • 原文地址:https://www.cnblogs.com/ympjsc/p/10049943.html
Copyright © 2011-2022 走看看