前端单页面应用分布式部署探索

举报
拿我格子衫来 发表于 2022/03/17 22:31:01 2022/03/17
【摘要】     公司后台Java使用的Spring Cloud的微服务框架,订单,商品,报价,每一个模块都是一个微服务,一个包,独立打包,单独部署.避免了业务代码之间的强耦合,包也变小了.这是背景.       近两天,公司项目准备重构,领导让我们调研一下将前端项目也重构成微服务模式,即,各个...

    公司后台Java使用的Spring Cloud的微服务框架,订单,商品,报价,每一个模块都是一个微服务,一个包,独立打包,单独部署.避免了业务代码之间的强耦合,包也变小了.这是背景.

      近两天,公司项目准备重构,领导让我们调研一下将前端项目也重构成微服务模式,即,各个模块单独打包,分别部署,再推辞不掉,我开始了前端分布式的探索.

   将前端分包编译,部署,首先想到的思路是使用webpack来实现.但研究了几天,看了很多webpack的配置文档,无奈,换个思路吧,

将每个模块单独编译成一个包,然后使用iframe嵌套到基础框架包里面,虽然使用iframe嵌套的方式有很多缺点,但目前也只有这么一条路行的通了.

 

但是这条思路有几个问题需要提前解决一下

1:外部路由定位到内部内容的问题

2:组件资源依赖,版本管理的问题

3:域名部署,iframe操作的封装

4:跨应用 跨iframe的状态管理.

 

接下来我一个一个来解决

  在路由router.js中这写一个组件


  
  1. {
  2. path: '/iframe',
  3. name: 'iframe',
  4. component: () => import(/* webpackChunkName: "about" */ './views/Iframe.vue'),
  5. children: [
  6. {
  7. path: '/iframe/*',
  8. component: ()=> import('./views/OtherMain.vue'),
  9. name: '加载外部的内容'
  10. }
  11. ]
  12. }

这个就是存放iframe的组件

OtherMain.vue组件中代码如下:


  
  1. <template>
  2. <div class="about">
  3. 1111111111111
  4. <h1>{{url}}</h1>
  5. <iframe :src="url"></iframe>
  6. </div>
  7. </template>
  8. <script>
  9. export default {
  10. name:'',
  11. data () {
  12. return {
  13. url: ''
  14. }
  15. },
  16. mounted() {
  17. let newPath = this.$router.currentRoute.fullPath
  18. this.url = this.changeUrl(newPath)
  19. },
  20. methods: {
  21. changeUrl (newPath) {
  22. let returnUrl = ''
  23. if (newPath === '/iframe/product/list'){
  24. returnUrl = 'http://mczaiyun.top/home/book.html'
  25. } else if (newPath === '/iframe/order/list') {
  26. returnUrl = 'http://mczaiyun.top/home/drew.html'
  27. }
  28. return returnUrl
  29. },
  30. },
  31. beforeRouteUpdate (to, from, next) {
  32. let newPath = to.path
  33. this.url = this.changeUrl(newPath)
  34. next()
  35. }
  36. }
  37. </script>

 

方法changeUrl 可以提取出来,作为一个当前路径匹配资源文件的转换器. 大致的思路就是这样,使用正则路由,搭配上路由守卫.监听组件url的改变,从而改变ifram的url

文章来源: fizzz.blog.csdn.net,作者:拿我格子衫来,版权归原作者所有,如需转载,请联系作者。

原文链接:fizzz.blog.csdn.net/article/details/88548381

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。