首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

聊聊微前端的原理和实践

通常,要实现上面类似的需求,我们很容易会想到使用iframe的方式来实现。入口框架中用iframe来显示子模块的页面,切换子模块时,iframe也跟着切换成对应子模块页面的url。...虽然iframe是比较容易实现的,但通常也会有一些问题: 显示区域受限制,比如子项目中显示弹窗蒙层时,蒙层只会覆盖iframe区域,无法覆盖整个页面,内容也无法真正居中。...页面浏览记录无法自动被记录,刷新页面后iframe又自动回到首页。 全局上下文完全隔离,变量不共享,页面间通信比较麻烦,比如子项目与主题框架、子项目之间通信等,只能采用postMessage方式。...而single-spa微前端方案结合了MPA和SPA的优势,可以单个页面内集成多个应用,并且是技术栈无关的。...(比如通常我们会将css、npm模块抽离成一个单独的文件),那么我们就要自行维护一个子应用资源列表并做一些额外处理,这个工作往往也是比较繁琐的; 将多个子应用都集成一个页面,css和js都是很有可能产生冲突的

2K30

Bifrost微前端框架及其美团闪购的实践

用户体验角度出发,Nginx和Iframe首先被否决;HR系统的方案需要对现有的项目进行改造,把不同团队目前开发的项目整合到同一个单页应用项目快速迭代的过程,成本过高,所以也被否掉。...,我们始终保持一个理念,就是保证对业务代码的零侵入,因此业务系统改造的工作量很小。...本地联调 采用微前端的方式意味着子系统的完全隔离,这给我们的开发带来了一系列困扰: 本地开发时,无法看到当前开发的功能在主系统实际运行的效果。...这也就解释了为什么布局子系统输出NPM包的同时还维护了一份静态资源。...微前端项目中,我们需要考虑多个工程的规范和代码质量的统一,需要引入更多的自动化工具来管理项目的发布部署流程,还需要处理多个前端工程运行在同一个域名下引起的Cookie覆盖等问题。

90210
您找到你想要的搜索结果了吗?
是的
没有找到

vivo 悟空活动台 - 微组件状态管理(下)

最早的 EventBus 升级迭代到【前置脚本方案】,最终回归到 Vuex 统一状态管理模式,针对平台的特点通过技术创新,使 Vuex 无缝集成到活动页的开发。...实时记住上次错误的组件索引当下次这个组件属性面板中被正常渲染出来就调用内部的钩子函数进行错误回溯。就如上图,可以提示用户上次为什么保存活动不成功。...', params: val }) }, deep: true } }, 【编辑器】子 iframe 监听 postMessage 的事件,一旦接收到数据变化,则进行对应的处理。...5、勇于探索,Vuex的跨iframe的数据管理 我们希望整体的组件状态管理方式回归一种方式上,既然我们都使用了 Vuex, 所以我们希望探索以vuex为核心的跨iframe的数据管理方案。...为什么 iframe 会中断 vuex 的响应式数据呢?这个时候,我们就需要回归原点,去理解 Vue 响应式数据的原理。

1.7K40

每日优鲜供应链前端团队微前端改造

一、需求以及成果 我所在团队是做toB业务的,技术栈是Vue,团队目前有十多个典型的toB业务(菜单+内容布局),这些业务都是服务于一个大平台的,因为历史原因,每个业务都是独立的,都有一个html入口,...所以当用户在这个大平台上使用这十多个业务的时候,每当切换系统时,页面都会刷新,体验很差;开发层面,这十多个业务又有太多共同之处,每次修改成本都很高。...最近有一个很重要的需求,内容是这样的:多个项目中,每个项目抽取若干功能组成一个新项目,基于现有架构的话,每当点击来自不同系统的功能页面就要刷新一次,这是不可接受的。...经过一番调研比对,我们决定使用当下比较火的 SingleSpa 来完成改造(iframe方案尝试过,不太适合我们的场景),目前改造已完成,我们实现了以下效果: 只有一个不包含子项目(子项目指的是那十多个业务...(管理角度) 也是有很多麻烦之处,需要消耗一定成本: 因为多个vue实例同一个document里,需要避免全局变量污染、全局监听污染、样式污染等,需要制定接入规范。

1.2K20

微前端说明以及使用

微前端概念 类型一样,只不过微前端是用fetch去请求js并渲染在指定的DOM容器。 ·  跟技术栈无关,任何前端技术栈都可以接入。...·  多个应用结合在一起,可以一起运行,又可以单独运行。 ·  一个复杂庞大的项目拆成多个微应用,单独开发、单独部署、单独测试,互不影响。...系统里面有很多个模块,模块里面又很多个子模块时。...实现的功能: vuex 动态添加了 global 模块及 routes 模块; global 模块:封装了全局下发的数据,以及数据修改通知到其他应用; routes 模块:路由数据的封装以及组件的导入...2、配置菜单 此系统因无菜单管理,相关菜单需要在数据库配置。

1K20

vue3后台管理系统(模板)

目的在于学习vite和vue3等新技术,以便于后续用于实际开发工作; 本文章将从管理系统页面布局、vue路由鉴权、vuex状态管理、数据持久化、用户信息加密等方面进行介绍和记录; 这也是我边学习边实践的过程....x、vuex-persistedstate(vuex数据持久化)、Element Plus等。...我们频繁使用 this 来处理事件函数和组件数据,vue3大多事件函数和数据状态的存储基本都实在setup函数完成的,vue3无法通过 this 来获取当前组件的实例,故无法像vue2那样操作数据和事件函数...,当再次访问时只需使用过this来访问自己指定的事件名即可; vue3我们若是使用全局变量或者事件函数时,我们需要借助 globalProperties 来实现全局事件函数的绑定;此时需要使用的地方可以通过当前组件实例来访问全局的...); }; ​ return { editor }; } }; ​ div.editor_ref :deep(iframe

4.6K20

一个基于vite构建的vue3+pinia+ts+elementUI plus的初始化开箱即用的项目模版

(vuex4)。 对比于 vuex3 ,state 现在是一个函数返回对象。 没有 mutations,不用担心,state 的变化依然记录在 devtools 。...getter 与 Vuex 的 getter 、组件的计算属性具有相同的功能 actions 这里与 Vuex 有极大的不同,Pinia 仅提供了一种方法来定义如何更改状态的规则,放弃 mutations...Pinia 让 Actions 更加的灵活: 可以通过组件或其他 action 调用 可以其他 store 的 action 调用 直接在 store 实例上调用 支持同步或异步 有任意数量的参数...(iframe) }, } export default Http; http文件夹下创建api文件夹用于统一存放接口文件,统一管理api http/api/login.ts import...通俗的来说,这就是一个工具函数包,它可以帮助你快速实现一些常见的功能,免得你自己去写,解决重复的工作内容。以及进行了基于 Composition API 的封装。让你在 vue3 更加得心应手。

58560

每日优鲜供应链前端团队微前端改造

一、需求以及成果 我所在团队是做 toB 业务的,技术栈是 Vue,团队目前有十多个典型的 toB 业务(菜单+内容布局),这些业务都是服务于一个大平台的,因为历史原因,每个业务都是独立的,都有一个...html 入口,所以当用户在这个大平台上使用这十多个业务的时候,每当切换系统时,页面都会刷新,体验很差;开发层面,这十多个业务又有太多共同之处,每次修改成本都很高。...最近有一个很重要的需求 X,内容是这样的:多个项目中,每个项目抽取若干功能组成一个新项目,基于现有架构的话,每当点击来自不同系统的功能页面就要刷新一次,这是不可接受的。...经过一番调研比对,我们决定使用当下比较火的 SingleSpa[1] 来完成改造(iframe 方案毫无亮点,弃之),目前改造已完成,我们实现了以下效果: 只有一个不包含子项目(子项目指的是那十多个业务...(管理角度) 也是有很多麻烦之处,需要消耗一定成本: 因为多个 vue 实例同一个 document 里,需要避免全局变量污染、全局监听污染、样式污染等,需要制定接入规范。

1.5K20

2020 前端面试:第一波面试题总结

工作经验四年,之前主要做平面相关,自己喜欢瞎折腾,17年开始研究前端,然后公司内部转岗到开发部门工作,算下来前端经验也快三年之久。...mutation:更改 Vuex 的 store 的状态的唯一方法是提交 mutation action: action 提交的是 mutation,而不是直接变更状态。...2.CommonsChunkPlugin CommonChunksPlugin已经webpack4移除。 可使用optimization.splitChunks进行模块划分(提取公用代码)。...503 Service Unavailable 服务器当前不能够处理客户端的请求,一段时间之后,服务器可能会恢复正常。 大概还有一些关于hhtp请求和响应头信息的介绍。...http请求携带(即使不需要),即cookie浏览器和服务器间来回传递。

2.1K30

2020 前端面试 | 第一波面试题总结

工作经验四年,之前主要做平面相关,自己喜欢瞎折腾,17年开始研究前端,然后公司内部转岗到开发部门工作,算下来前端经验也快三年之久。...mutation:更改 Vuex 的 store 的状态的唯一方法是提交 mutation action: action 提交的是 mutation,而不是直接变更状态。...2.CommonsChunkPlugin CommonChunksPlugin已经webpack4移除。 可使用optimization.splitChunks进行模块划分(提取公用代码)。...503 Service Unavailable 服务器当前不能够处理客户端的请求,一段时间之后,服务器可能会恢复正常。 大概还有一些关于hhtp请求和响应头信息的介绍。...http请求携带(即使不需要),即cookie浏览器和服务器间来回传递。

1.7K10

微前端qiankun搭建到部署的实践总结

因此,它只适合每次只mount一个子应用的架构(不适合多个子应用共存);若父应用数据有变化而子应用又没触发mount,则父应用最新的数据无法同步回子应用。...为了可复用,可以把登录逻辑封装在common,然后子应用独立运行的逻辑添加登录相关的逻辑。...此时我们依然要注册一个名为global的vuex module,子应用内部同样可以global module获取用户的信息,从而做到抹平qiankun和独立运行时的环境差异。...由于qiankun暂时没有封装子应用向父应用抛出事件的api,如iframe的postMessage,所以方案一有些难度,不过可以将激活状态放到状态管理,子应用通过改变vuex的值让父应用同步就行,...本地dev开发时是完全正常的,这个问题是部署后首次打开页面才会出现的,F5刷新后又会正常,只能在清掉缓存后复现一次。这个bug困扰了几天。

2K11

做好这 16 个方向,逐步搭建出团队的 vue3 前端架构

减少重复的初始化工作,不需要再复制其他类似的项目删除无关代码,或零搭建一个项目。 可以根据团队需求,使用简单的交互操作生成相应的目录结构和文件。...这种情况下你可以使用 /deep/ 或 ::v-deep 操作符取而代之——两者都是 >>> 的别名,同样可以正常工作。...脚手架,所有的通用布局组件都应该放在 src/layouts ,这种封装比较简单,这里就不贴代码了,大家按照自己实际情况自行发挥,在此仅提供一下封装思路。...emit 仍然包含于现有的 API ,因为它用于触发由父组件声明式添加的事件处理函数。 Vue 3 ,已经不可能使用这些 API 组件内部监听组件自己发出的事件了,该用例暂没有迁移的方法。... src 目录 创建 api 目录,内部目录应按照后端制定的模块创建。 每个模块创建多个 ts 文件,一个接口应对应一个 ts 文件,其中包含了以下内容: 请求参数的类型声明。

3.4K42

基于 iframe 的微前端框架 —— 擎天

那为啥不使用iframe呢?qiankun 团队也给出了原因:看这里 Why Not Iframe。总结起来就是:url 不同步。浏览器刷新 iframe url 状态丢失、后退前进按钮无法使用。...完全隔离 —— 不同子应用完全隔离,只子应用项目初始化时设置一次,之后不需要在后续开发及后期维护中考虑,降低开发的心智负担。...图片但不同应用有个相同的公用部分,因此需要把公共部分做成统一组件,发到npm包每一个应用引入就行。...图片5.3 子应用iframe瞬间切换解决问题:子应用切换卡顿用户进行多个子应用切换时,擎天框架监听浏览器url地址,如pathname/New/*变成/Web/*,则将/New/*对应的子应用iframe...图片子应用通过类vuex似的 mapGlobalState 方法可以获取父应用store数据,同时该数据为响应式,数据变更可触发UI重新渲染。

1.5K90

Vue一到三年面试题总结

感谢内容提供者:金牛区吴迪软件开发工作室 笔者粉丝群里的朋友们多部分的人都在找vue的工作而没有再找react工作,所以我之前总结的html,css,js,react面试题还不行,还要继续拓展vue...11.iframe的优缺点? 答案:iframe也称作嵌入式框架,嵌入式框架和框架网页类似,它可以把一个网页的框架和内容嵌入现有的网页。...14.vuex是什么?怎么使用?哪种功能场景使用它? 答案:vue框架状态管理。main.js引入store,注入。新建了一个目录store,…… export 。...能够把页面抽象成多个相对独立的模块,解决了我们传统项目开发:效率低、难维护、复用性等问题。 创建一个组件,然后使用Vue.component方法注册组件。子组件需要数据,可以props接受定义。...答案:它的生命周期中有多个事件钩子,让我们控制整个Vue实例的过程时更容易形成好的逻辑。 28.如何解决vue修改数据不刷新页面这个问题?

2.8K10

前端面试题最新

25.absolute的containing block计算方式跟正常流有什么不同? 26.CSS里的visibility属性有个collapse属性值?不同浏览器下以后什么区别?...86.vuexactions和mutations有什么区别? 87.怎么监听vuex数据的变化? 88.vue和react的原理有什么不同? 89.开启vuex的严格模式有什么好处?...91.vue的指令v-on如何绑定多个属性? 92.vue中使用delete删除对象的属性,页面会更新吗? 93.watch怎么深度监听对象变化?...120.css/js代码上线之后开发人员经常会优化性能,用户刷新网页开始,一次js请求一般情况下有哪些地方会有缓存处理? 121.你如何理解HTML结构的语义化?...188.Vue.jsajax请求代码应该写在methods还是vuex的actions? 189.下面代码 a 什么情况下会打印 1?

1.1K10

前端面试题汇总

常见方法:合并多个CSS文件和js文件,利用CSS Sprites整合图像,Inline Images(使用 data:URL scheme实际的页面嵌入图像数据 ),合理设置HTTP缓存等。...(7)最小化iframe的数量:iframes 提供了一个简单的方式把一个网站的内容嵌入到另一个网站。但其创建速度比其他包括JavaScript和CSS的DOM元素的创建慢了1-2个数量级。...以上的这些模式非常脆弱,通常会导致无法维护的代码。 因此,我们为什么不把组件的共享状态抽取出来,以一个全局单例模式管理呢?...另外,通过定义和隔离状态管理的各种概念并强制遵守一定的规则,我们的代码将会变得更结构化且易维护。 如果您不打算开发大型单页应用,使用 Vuex 可能是繁琐冗余的。...但是,如果您需要构建一个中大型单页应用,您很可能会考虑如何更好地组件外部管理状态,Vuex 将会成为自然而然的选择 33、setTimeout setTimeout()只有效果产生以后,才会生成唯一的

2.8K30

Vuex 入门及详解

Vuex 是专门为 Vue.js 设计的状态管理库 它采用集中式的方式存储需要共享的数据 使用角度,它就是一个 JavaScript 库 它的作用是进行状态管理,解决复杂组件通信,数据共享 什么情况下使用...当你的应用具有以下需求场景的时候: 多个视图依赖于同一状态 来自不同视图的行为需要变更同一状态 建议符合这种场景的业务使用 Vuex 来进行数据管理,例如非常典型的场景:购物车。...state 数据才会和调试工具正常工作。...,提交 mutation 注意:也不要在 action 中直接修改 state,调试工具工作有问题 mutation 修改 state 注意:也不要在 mutation 执行异步操作修改 state...,调试工具工作有问题 只有 mutation 修改 state 才能反应到调试工具 state 数据发生改变,视图更新

92320

iframe框架及优缺点

iframe框架及优缺点 HTML5不再支持使用frame,关于frame与iframe的区别,可以参阅 iframe与frame的区别 基本使用 src:规定在iframe显示的文档的URL。...scrolling:规定是否 iframe 显示滚动条。 width:规定iframe的宽度,建议使用CSS替代。 height:规定iframe的高度,建议使用CSS替代。...加载广告 广告是与原文无关的,假如硬编码进去,会造成网页布局的紊乱,而且这样势必需要引入额外的css和js文件,极大的降低了网页的安全性,使用iframe便可以解决这些问题。...优缺点 优点 可以跨域请求其他网站,并将网站完整展示出来 典型系统结构可以提高代码的复用性 创建一个全新的独立的宿主环境,可以隔离或者访问原生接口及对象 模块分离,若多个页面引用同一个iframe,则便于修改操作...有时iframe由于页面挤占空间的原因出现滚动条,造成布局混乱。 不利于SEO,搜索引擎的爬虫无法解读iframe的页面。 有些小型的移动设备如手机等无法完全显示框架,兼容性较差。

3.2K20
领券