vue-router 去中心化

vue-router 是 Vue.js 官方的路由管理器。它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌。vue-router 的路由配置信息一般统一写在 src/router.js 中,这既是优点之一也是缺点之一。优点在于当小型项目或项目初期时,路由中心化可以很好地管理项目中零碎的路由,不用到处查找;但是一旦项目做大做复杂了,中心化的路由反而成了缺点。在成百上千的组件导入和路由信息前,查找具体某个路由真的非常困难,路由去中心化就起了非常重要的作用。

去中心化实现

1. 模块划分路由

将业务以模块划分,不同的模块实现不同的功能,这是大型项目比较理想的架构。同时每个模块只管理对应的路由,既简单又直观,可以很快地找到某个页面对应的路由。比如下图的文件结构:

.
├── src
|   ├── modules
|   |   ├── module1
|   |   |   ├── routes.js
|   |   |   └── ...
|   |   ├── module2
|   |   |   ├── routes.js
|   |   |   └── ...
|   |   └── ...
|   ├── router.js
|   └── ...
└── ...

在每个模块下的 routes.js 文件中编写路由配置,和官方示例中在 router.js 中的差不多

const about = () => import('./views/About.vue');

export default [
    {
        path: '/about',
        name: 'about',
        component: about,
    },
    ...
];

2. 路由统一注册

虽然已经将路由配置分散到了响应的模块,但是如果不在 vue-router 中注册是不起作用的。如何将分散在不同模块下的路由配置统一注册呢?在上一篇文章里的 require.context 又见面啦~不知道的童鞋可以翻翻咱的上一篇文章,至于具体的使用方式见 webpack 官网

let routeList = [];
const context = require.context(`./modules`, true, /routes\.js$/);

context.keys().forEach(r => {
    const {default: routes} = context(r);
    routeList = routeList.concat(routes);
});

这里就已经获取到了全部的路由配置了,接下来注册就好了

const router = new Router({
    routes: routeList,
});

总结

其实前端路由的管理一直有争议,中心化和去中心化也各有各的优点和缺点,至于如何择决,这要看个人的意愿和公司的项目架构了。


欢迎转载,转载请注明出处:https://blog.kaguramea.me/archives/vue-router-decentralization

一个在学日本語的前端程序猿