点击上方 前端Q,关注公众号
回复加群,加入前端Q技术交流群
image (1).png
开发:
用户:访问会越来越慢,很容易受到开发上线影响的自己的功能,主题千年不变等等。
如何将一个巨石的管理系统改造拆分(各个中心的模块下面还有几十个菜单)
将前端应用分解成一些更小、更简单的能够独立开发,测试、部署的小块,而在用户看来仍然是内聚的单个产品。微前端的三个要素,即:独立运行、独立开发(与技术栈无关,应用之间不应该有任何直接或间接的技术栈、依赖、以及实现上的耦合)、独立部署
对外,看上去是一个系统。对内又可以分多个web项目
WeChatcf7b6c8ed331d55a1ac4fa5046d162d6.png
//MDN地址
https://developer.mozilla.org/zh-CN/docs/Web/Web_Components
复制代码
目前使用比较多的是运行时组合的方案。关注度和成熟度最高的应该就是 single-spa。还有国内关注度很高的蚂蚁金融的框架qiankun
qiankun 是一个生产可用的微前端框架,它基于 single-spa,具备 js 沙箱、样式隔离、HTML Loader、预加载 等微前端系统所需的能力。qiankun 可以用于任意 js 框架,微应用接入像嵌入一个 iframe 系统一样简单(想知道更多请去官网)
u=1247095003,2276844947&fm=26&gp=0.jpg
说了这么多,下面才是重点
(当然,不可否定,在当时,这是一个架构很好的项目)
在不影响原来的项目基础的情况下优化项目,以最小改动,使之既能继承原有的能力,又符合现在的开发习惯和技术方向(注入微服务的思想)
针对这个项目iframe方案是接入成本最廉价的选择,同时也支持通过possMassage实现父子之间的通讯。而且,对于陈年已久的Jquery多页面的老项目,qiankun对多页应用没有很好的解决办法。每个页面都去修改,成本很大也很麻烦,但是使用 iframe 嵌入这些老项目就比较方便。 (新建两个子项目vue/react各一个,在原来的架构下,开发访问)
使用iframe,并且路由中以 **“#/iframe”** 开头即可访问并隐藏其他的内容,分开iframe与原有的内容的并且通过显示隐藏进行切换
解决访问关系,即本地开发和线上访问(线上访问打包后的内容,线下访问本地能热更新代码)本地访问地址(自动截取iframe后面的url并访问)
//本地
http://localhost:8080/main/index.html/#/iframe/http://localhost:3001
//线上访问地址(localhost改为ip地址):
http://localhost:8080/main/index.html/#/iframe/test/dist/index.html
复制代码
本地请求启动代理即可(需要注意cookie情况)
WeChat670866049dadbe4c596ea0515df99f1c.png
为符合线上线下都能使用(线下存在同源问题),使用postMessage实现,然后项目内部使用公共bus,传播基层传递过来的消息(依据项目的技术情况)
有个注意点:在react项目中可以等待基层将所有的信息准备完毕并传递给子项目之后再渲染主要内容。但是在vue中延迟挂载app.mount('#app')会报错。所以使用公共bus将基层信息,传播给子项目
本地开发运行两个项目,一个是基层的一个是独立的项目
最后和某位大佬有个讨论点,就是iframe做微前端不好。因为看了why not ifram这篇文章。但个人觉得,用哪个还是要看实际情况,针对这次项目优化,你的目标是啥。qiankun.js就牛了?是的蛮牛的,但是不能因为iframe比较上年纪,就嫌弃。。。。peace and love~
记得给我点赞????
关于本文
来源:阿秋_在路上
https://juejin.cn/post/6966189658132709390