当前位置:首页 > 技术分析 > 正文内容

基于vite多页面实现多端同构开发和部署

ruisui883个月前 (02-03)技术分析11

背景

由于在开发前端项目中,后台管理端和用户端存在多个模块和页面逻辑可以复用,管理模块和用户端渲染模块使用同一套状态管理机制,只是在管理端和用户端的入口和路由模块不同,为了能够在开发时同时修改管理端和用户端共用模块,不用多项目工程修改和发布,我们基于vite多页面的基础上实现了多端同构开发和部署。


多端同构实现流程


??

具体配置流程

1,多页面入口配置

首先我们可以在工程目录下创建多页面文件,不同页面配置的入口entry不同来建立多入口,

以下我们以管理端和用户端两个端为例来说明实现流程

比如:

管理端入口配置

admin/index.html


    

admin.js

import { createApp } from 'vue'
import App from './admin.vue'
import router from './adminRouter';
import store from './store'
const app = createApp(App)
app.use(store).use(router)
app.mount('#app')


用户端:public/index.html


    

public.js

import { createApp } from 'vue'
import App from './public.vue'
import router from './publicRouter';
const app = createApp(App)
app.use(store).use(router)
app.mount('#app')

2,用户访问权限判断

不同的用户有不同的角色身份,我们需要根据用户登录后的角色来判断是否可以访问该入口,如果该用户不具备该入口的访问权限,我们需要在入口处拦截进行提示或者让页面重定向到拥有权限的入口处, 这块可以通过前端请求处理也可以,通过服务端配置角色和白名单类型处理。

下边以前端调用后端接口实现

以public.js为例

import { createApp } from 'vue'
import App from './public.vue'
import router from './publicRouter';
fetch(/xxx/).then((res)=> {
    if(res) {
        const app = createApp(App)
        app.use(store).use(router)
        app.mount('#app')
    } else {
        /** 跳转到其他有权限页面 或者进行无权限提示**/
    }
})

3,路由模式匹配

每个端应用建议配置自己的路由,用于和其他端模块资源划分

常用的路由分为hash模式和history模式,不同模式下的配置路由略有差异,一般history模式需要通过服务端支持实现,否则会出现刷新页面出现404的情况。

hash模式实现

管理端:adminRouter

import { createRouter, createWebHashHistory } from 'vue-router';
const router = createRouter({
    history: createWebHashHistory('/pageadmin/'),
    routes:[{
        path: '/page1',
        name: 'page1',
        component:() => import('@/page1.vue')
    }]
});

export default router;

用户端:publicRouter

import { createRouter, createWebHashHistory } from 'vue-router';
const router = createRouter({
    history: createWebHashHistory('/pagepublic/'),
    routes:[{
        path: '/page1',
        name: 'page1',
        component:() => import('@/page1.vue')
    }],
});

export default router;

history模式实现

history模式的实现管理端和用户端同hash模式,将createWebHashHistory改为createWebHistory即可:

import { createRouter, createWebHistory } from 'vue-router';
const router = createRouter({
    history: createWebHistory('/xxx/'),
    routes:[{
        path: '/page1',
        name: 'page1',
        component:() => import('@/page1.vue')
    }],
});

export default router;

history本地开发刷新404解决

history模式,由于hash模式时url带的#号后面是哈希值不会作为url的一部分发送给服务器,而history模式下当刷新页面之后浏览器会直接去请求服务器,而服务器没有这个路由,于是就出现404, 为了解决该问题,我们可以采用如下方案

通过配置代理,将访问的路由指向我们本地开发服务器目录文件

proxy: {
  '/pageadmin/': {
    target: 'http://easy-page.local.jdl.com:8089',
    changeOrigin: true,
    rewrite: (path) =>'/admin/index.html'
  },
  '/pagepublic/': {
     target: 'http://easy-page.local.jdl.com:8089/',
     changeOrigin: true,
     rewrite: (path) => '/public/index.html'
  }
}


4,vite.config.js入口配置

build: {
      rollupOptions: {
        input: {
          admin: resolve(__dirname, 'admin/index.html'),
          public: resolve(__dirname, 'public/index.html'),
        },
      },
}

打包后的目录结构

打包后,我们可以看到生成了两个入口文件 admin/index.html 和 public/index.html

assets是两个入口共用的资源内容包括 js,css,png等等


??

生产配置

生产环境我们也需要根据url路由区分访问入口, 我们可以根据资源的访问路径,将其指定到不同的应用入口来实现不同端访问的资源内容不同,同时可以在服务端配置检测客户端的userAgent来现在各个端访问设备,可以给各个端配置白名单来限制用户访问

location /pageadmin {
   add_header Cache-Control  no-store;
   try_files $uri $uri/  /admin/index.html;
}
location /pagepublic {
    add_header Cache-Control  no-store;
    try_files $uri $uri/  /public/index.html;
}

总结

以上是我们基于vite多页面同构方案来实现多个端一套代码开发构建部署,实现工程模块中相同模块和资源的共享复用,减少多个应用的创建和多域名申请,以及多个应用之间相互关联交互,通过path来区分不同的用户访问。

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/841.html

标签: vite.js
分享给朋友:

“基于vite多页面实现多端同构开发和部署” 的相关文章

如何在GitLab上回退指定版本的代码?GitLab回退指定版本问题分析

在Git中,回退到指定版本并不是删除或撤销之前的提交,而是创建一个新的提交,该提交包含指定版本的内容。这意味着您需要将当前代码更改与指定版本之间的差异进行比较,并将其合并到一个新的提交中。如果您没有更新本地代码,并且您希望将 GitLab 仓库回退到指定版本,您可以使用以下命令:git fetchg...

编码 10000 个小时后,开发者悟了:“不要急于发布!”

【CSDN 编者按】在软件开发的道路上,时间是最好的老师。根据“一万小时定律”,要成为某个领域的专家,通常需要大约一万小时的刻意练习。本文作者身为一名程序员,也经历了一万小时的编程,最终悟出了一个道理:慢即是快,重视架构设计和代码质量,确保每一行代码都经得起时间的考验。作者 | Sotiris Ko...

壹啦罐罐 Android 手机里的 Xposed 都装了啥

这是少数派推出的系列专题,叫做「我的手机里都装了啥」。这个系列将邀请到不同的玩家,从他们各自的角度介绍手机中最爱的或是日常使用最频繁的 App。文章将以「每周一篇」的频率更新,内容范围会包括 iOS、Android 在内的各种平台和 App。本期继续歪楼,由少数派撰稿作者@壹啦罐罐介绍他正在使用的...

「云原生」Containerd ctr,crictl 和 nerdctl 命令介绍与实战操作

一、概述作为接替Docker运行时的Containerd在早在Kubernetes1.7时就能直接与Kubelet集成使用,只是大部分时候我们因熟悉Docker,在部署集群时采用了默认的dockershim。在V1.24起的版本的kubelet就彻底移除了dockershim,改为默认使用Conta...

「干货」FPGA设计中深度约束技巧及调试经验总结

今天跟大家分享的内容很重要,也是我们调试FPGA经验的总结。随着FPGA对时序和性能的要求越来越高,高频率、大位宽的设计越来越多。在调试这些FPGA样机时,需要从写代码时就要小心谨慎,否则写出来的代码可能无法满足时序要求。另外,最近跟网友聊天时,有谈到公众号寿命的问题,我觉得网络交换FPGA公众号应...

全新斯柯达柯珞克Karoq深度评测:大众替代品

“斯柯达柯珞克是一款出色的全能家庭 SUV,具有许多有用的功能”价格36,605 英镑- 49,190 英镑优点方便的 VarioFlex 后排座椅非常适合家庭入住驾驶乐趣缺点保修期短保守的内饰性格比Yeti少结论——斯柯达柯珞克是一辆好车吗?斯柯达柯珞克是在辉煌的七座 斯柯达柯迪亚克之后推出的,因...