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

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

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

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

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

 

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

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

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

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

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

 

接下来我一个一个来解决

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

{
      path: '/iframe',
      name: 'iframe',
      component: () => import(/* webpackChunkName: "about" */ './views/Iframe.vue'),
      children: [
        {
          path: '/iframe/*',
          component: ()=> import('./views/OtherMain.vue'),
          name: '加载外部的内容'
        }
      ]
    }

这个就是存放iframe的组件

OtherMain.vue组件中代码如下:

<template>
  <div class="about">
    1111111111111
    <h1>{{url}}</h1>
    <iframe :src="url"></iframe>
  </div>
</template>
<script>
export default {
  name:'',
  data () {
    return {
      url: ''
    }
  },
  mounted() {
    let newPath = this.$router.currentRoute.fullPath
    this.url = this.changeUrl(newPath)
  },
  methods: {
    changeUrl (newPath) {
      let returnUrl = ''
      if (newPath === '/iframe/product/list'){
        returnUrl = 'http://mczaiyun.top/home/book.html'
      } else if (newPath === '/iframe/order/list') {
        returnUrl = 'http://mczaiyun.top/home/drew.html'
      }
      return returnUrl
    },
  },
  beforeRouteUpdate (to, from, next) {
    let newPath =  to.path
    this.url = this.changeUrl(newPath)
    next()
  }
}
</script>

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拿我格子衫来

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值