什么是微前端:
简而言之,微前端是将微服务原则应用于前端应用程序的一种方式,这将带来多个好处,如自主团队、易于维护、独立部署和灵活的技术选择。
微前端架构最适合大型应用程序和大型团队协作的场景,旨在通过分工来提高效率,否则采用微前端架构可能会导致过度复杂。
1. iFrames 老生常谈的iframe标签,可以在页面的任何地方使用,需要确保要包含为iframe的页面启用此头部 X-Frame-Options: ALLOW-FROM example.com
可以通过两种方式将数据从父页面传递到iframe:
- URL参数
- Postmessage
2. Javascript打包 在运行时将任何用任何框架编写的JavaScript文件包含到页面中,并确保该文件将在您在原始应用中的特定位置创建的div中渲染。 您可以以相同的方式包含CSS文件,或包含一个manifest.json文件,该文件引用您所有的JS和CSS文件(如果有多个JavaScript和CSS文件),并会自动加载所有所需文件。
3. Zones Next.js中的一个特性,让您可以使用重定向将另一个项目引用为主应用中的页面。如果您不使用Next.js,也可以通过Nginx实现这一点。 由于主应用和所有区域都在同一域上,它们将共享cookie,因此您可以在主应用上进行身份验证,其他应用可以读取身份验证cookie。
4. 模块联邦 Webpack 5中的一项新特性,允许您导出组件并在另一个应用中使用,像使用应用中的其他组件一样导入它,对联邦组件的任何更新将在运行时反映给所有消费者。
5. 其他专用框架 有一些框架专门用于构建微前端,如 bit.dev/ single-spa.js.org/
演示
我创建了一个小型演示,使用了Zones和模块联邦。 在这个演示中,有两个区域:主页和产品,我将顶部菜单栏作为联邦模块从主页应用导出,并在主页和产品中使用。 同时使用next-auth库创建了简单的身份验证,并且在两个区域之间共享。
演示链接 mfe-shop-home.vercel.app/ mfe-shop-products.vercel.app/products
进一步阅读 www.facebook.com/notes/10158… dev.to/luistak/cro… micro-frontends.org martinfowler.com/articles/mi… indepth.dev/posts/1477/…