使用Vue Vite和模块联合会建造微观前端体系结构

使用vue vite和模块联合会建造微观前端体系结构

微前端架构已成为构建可扩展、模块化应用程序的流行方法。它将整体前端拆分成更小、独立的微前端 (MFEs),从而实现团队独立开发、单独部署和提升可维护性。本文将探讨一个基于 Vue 3、Vite 和 Module Federation 的微前端示例,并利用动态路由管理构建灵活、可扩展的架构。

在每个微前端都需要自身 Vue 实例的情况下,这种方法尤为有效,允许团队在避免依赖冲突的情况下开发和维护独立的前端服务。此外,该架构仅加载必要的 Vue 实例,确保性能良好,同时保持微前端间的隔离。我们使用 Module Federation 运行时和路由清单在运行时动态获取和加载 MFEs。这意味着 MFEs 不会打包到主应用程序中,而是在需要时按需加载,从而提升灵活性并减少初始加载时间。

微前端架构概述以下是我们微前端设置的工作原理概述:

+----------------+      +------------------+      +------------------+ |  主应用      |      |  微前端 1      |      |  微前端 2      ||  (Vue Router)  |      |  (app-1)         |      |  (app-2)         ||  loader.vue    |      |  Vue 实例      |      |  Vue 实例      |+----------------+      +------------------+      +------------------+

主应用 处理路由并在运行时动态加载 MFEs。loader.vue 负责根据路由变化安装和卸载微前端。每个微前端 拥有自己的 Vue 实例独立运行,并通过 Module Federation 公开组件。

快速上手克隆仓库并安装依赖:

git clone https://github.com/lmlong-huynh/micro-frontend-sample.gitcd micro-frontend-samplenpm install

启动所有微前端和主应用:

npm run dev

或者单独启动每个微前端:

立即学习“前端免费学习笔记(深入)”;

cd packages/host && npm run devcd packages/app-1 && npm run devcd packages/app-2 && npm run dev

路由清单配置路由清单在主应用中动态注册微前端路由。所有路由都指向 loader.vue,而不是直接引用远程应用。清单中,我们定义两个属性:一个指定路由对象,另一个指示哪个 MFE 以及从哪里加载。

// routeManifest.jsexport const routeManifest = [  {    route: {      path: '/app-1',      name: 'app1',      meta: { requiresAuth: false },    },    remote: { module: 'app1/app' }  },  {    route: {      path: '/app-2',      name: 'app2',      meta: { requiresAuth: false },    },    remote: { module: 'app2/app' }  }];

在路由器文件中,我们使用清单创建所有路由。这是因为导航到页面时,我们需要知道要加载哪个远程 MFE 并进行渲染。

所有 MFE 路由都指向 loader.vue,因为这里包含了处理 MFE 安装和卸载的大部分逻辑。它也确保每个 MFE 只有一个 Vue 实例(总共两个实例,包括主应用)。

// router/index.jsimport { createRouter, createWebHistory } from 'vue-router';import routeManifest from '../routeManifest';const getRoutes = () => {  return routeManifest.map((mfe) => ({    path: mfe.route.path,    name: mfe.route.name,    meta: mfe.route.meta,    component: () => import('@/components/loader.vue'), // 所有路由都指向 loader.vue  }));};const routes = getRoutes();const router = createRouter({  history: createWebHistory(),  routes,});export default router;

加载器组件所有路由都指向 loader.vue,而不是直接渲染微前端。当访问路由时,该组件会动态加载并安装微前端,并在运行时使用 Module Federation 从远程主机获取 MFE。

loader.vue 中,我们跟踪当前路由。通过了解路由,我们可以确定要加载哪个远程 MFE。此外,我们跟踪当前已安装的 MFE,以便在加载新的 MFE 之前可以卸载它。此方法确保没有不必要的 Vue 实例正在运行。

  
import { ref, onMounted, watch } from 'vue';import { useRoute } from 'vue-router';import { useModuleFederation } from '@/plugins/federationPlugin';import routeManifest from '../routeManifest';export default { setup() { const route = useRoute(); const moduleFederation = useModuleFederation(); const containerRef = ref(null); const currentModule = ref(null); // ... (其余代码与原文相同) }};

结论本文提供了一个简单的解决方案。当然,还有其他用例,例如从主应用处理 MFE 中的嵌套子路径,我们可以在后续文章中探讨。

通过实现路由清单和加载器组件,此微前端架构可以实现高度动态和可扩展的系统。使用 Vue 3、Vite 和 Module Federation,我们可以按需动态加载微前端,确保模块化和可维护性,同时保持良好的性能。 请访问完整的 GitHub 仓库了解更多信息并进行实验!

以上就是使用Vue Vite和模块联合会建造微观前端体系结构的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1501344.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 23:29:18
下一篇 2025年12月19日 23:29:31

相关推荐

  • 面向流的编程

    如果你的应用程序完全基于ui库或框架与dom的响应式流,我们可以称之为“流式编程”,因为它精准地概括了其核心概念。这是什么?这是一种主要源于响应式编程的编程范式,其中所有内容都被定义为流。几乎所有组件都可以(更准确地说,应该)表示为流,它们使用相同的“通信协议”。虽然常见的模式是使用可观察对象(订阅…

    2025年12月19日
    000
  • 从混乱到清晰:掌握Web应用程序中的JSON数据处理

    高效处理巨型JSON数据,轻松构建卓越Web应用!还记得第一次处理API返回的庞大JSON数据包的场景吗?无尽的嵌套对象和数组令人望而生畏,我的应用难以胜任。 这促使我深入研究JSON数据处理的技巧:解析、转换和展示。 本文将分享我的经验,助您将JSON数据混乱转化为清晰、易用的信息,无论您是新手还…

    2025年12月19日
    000
  • 前端基本面0

    项目进度:前端基础模块开发 待解决问题: 选项卡UI: 一个相对简单的UI问题。 回调函数与function.call(): 需要进一步研究回调函数的创建和function.call()方法的应用。 立即学习“前端免费学习笔记(深入)”; 文件资源管理器UI: UI设计简化后,问题已基本解决。 备忘…

    2025年12月19日
    000
  • JavaScript阵列解释了:关键概念和共同挑战

    JavaScript数组是用于存储有序数据集合的特殊对象,其键为数字索引,值可以是任意数据类型。TypeScript在使用数组时能有效弥补一些不足。数组包含多种方法,方便管理有序数据,并具有length属性。由于数组专为有序数据设计,因此开发者应遵循其特性进行使用。需要注意的是,数组是对象,因此它们…

    2025年12月19日
    000
  • 私人学生贷款进行教育的必要性

    高等教育是人生中最重要的投资之一,然而,高昂的学费、住宿费、教材费以及其他生活费用常常成为许多学生求学路上的巨大障碍。虽然奖学金、助学金和联邦贷款能够提供一定的资金支持,但往往无法完全覆盖所有费用。这时,私人学生贷款就成为了帮助学生实现学术和职业目标的关键途径。 高等教育成本的持续攀升 近几十年来,…

    2025年12月19日
    000
  • SSR的概念以及为什么重要

    大家好!如果您从事网络开发,您可能听说过服务器端渲染(SSR),尤其是在Next.js等框架中。但SSR究竟是什么,为什么它如此重要呢?让我们深入探讨。 什么是服务器端渲染(SSR)? SSR,即服务器端渲染,是一种在将网页发送到浏览器之前,服务器预先生成HTML的技术。这意味着用户访问您的网站时,…

    2025年12月19日
    000
  • 避免使用NPM CI的生产灾难:稳定部署的关键

    引言 在JavaScript项目中管理依赖关系至关重要,npm(Node Package Manager)提供了强大的工具来处理版本控制。开发环境和生产环境依赖版本不一致会导致意外错误和兼容性问题,而npm version和npm ci命令则能有效解决此问题。本文将深入探讨package.json、…

    2025年12月19日
    000
  • 了解打字稿中的JavaScript地图

    如果您熟悉 JavaScript 和 TypeScript,可能习惯使用数组和对象(或字典)存储数据。但您是否尝试过使用 Map?Map 提供诸多优势,让您的代码更简洁、更高效、更灵活。 让我们深入探讨为何您应该使用 Map,它与数组和对象的差异,以及如何在 TypeScript 中有效利用它。 为…

    2025年12月19日
    000
  • 前端基本面20

    前端开发实践:自动完成功能设计与实现 本文探讨如何设计和实现一个高效的前端自动完成功能,并重点关注其架构、API设计、性能优化和用户体验。 1. 数据序列化 (JSON.stringify) 在处理自动完成功能的数据时,JSON.stringify 用于将 JavaScript 对象转换为 JSON…

    2025年12月19日
    000
  • 管理React子域的路线和导航

    本教程延续上一篇,讲解如何在React子域中管理路由和导航,实现不同布局间的无缝切换。我们将使用React Router来完成这项任务。 React Router与布局管理 由于React是单页应用(SPA)框架,高效的导航管理至关重要。React Router允许为不同路由定义不同的布局,非常适合…

    2025年12月19日
    000
  • 如何将兰链用于AI工作流程自动化

    引言 在飞速发展的AI领域,自动化是提升效率和可扩展性的关键。LangChain是一个开源框架,它提供强大的工具,用于将大型语言模型(LLM)集成到应用程序中。无论您是构建聊天机器人、数据处理管道还是智能决策系统,LangChain都能通过无缝连接不同的组件,实现AI工作流的自动化。本文将探讨如何利…

    2025年12月19日
    000
  • JavaScript中格式化字符串:排序,复数和列表

    您是否曾尝试对不同语言的单词进行排序、处理复杂的复数规则或以自然的方式格式化列表?Intl API提供了一些强大的功能,尤其是在处理字符串和列表方面。 简述 我们将重点介绍三个强大且常被忽视的功能: Intl.Collator:正确排序和比较字符串,支持多种语言。Intl.PluralRules:处…

    2025年12月19日
    000
  • 提高刺激的一个简单技巧

    刺激框架兼容性及旧版safari浏览器问题解决 Stimulus 框架原生支持所有现代的、自动更新的桌面和移动浏览器。然而,Stimulus 3 不兼容 Internet Explorer 11。在最近的一个项目中,我发现旧版本的 iOS Safari 浏览器在处理特定代码部分时也存在问题。为了说明…

    2025年12月19日
    000
  • 最佳SEO和性能优化的最佳优质WordPress插件

    构建高性能、功能强大的wordpress网站,插件至关重要。无论您是运营教育网站、电商平台还是个人作品集,seo和性能优化都必不可少。优质wordpress插件能提升网站速度、功能和搜索引擎排名,确保用户获得流畅体验。本文将介绍一些专注于seo和性能优化的优秀wordpress插件,它们与高级wor…

    好文分享 2025年12月19日
    000
  • 如何为Windows添加“使用VSCODIUM打开”

    Windows系统下的VSCodium用户,常常需要快速便捷地从文件资源管理器中打开文件夹。本文将指导您修改Windows注册表,添加“使用VSCodium打开”选项,实现这一目标。我们将介绍两种方法: 方法一:右键单击文件夹名称打开 此方法允许您直接右键单击文件夹名称,即可在VSCodium中打开…

    2025年12月19日
    000
  • TIL:使用ModuleCreateRequire(节点)在ES模型中同步导入

    使用node:module的createrequire在es模块中同步导入配置 我一直在寻找一种方法,在Node.js包中同步导入配置文件,例如process.cwd() + “/my-config.js”中的配置文件。import() 的问题在于它是异步的,而我的基础工具需要同步的配置文件。 在搜…

    2025年12月19日
    000
  • 最高网络安全趋势和基本技巧,以确保纳吉·齐齐(Najib Ziazi)的见解

    网络安全正在迅速发展,随着技术的进步,新的威胁出现了。在2025年,组织和个人必须通过了解关键趋势并实施有效的安全措施来保持领先地位。这是一些关键的网络安全趋势和维护保护的技巧。2025年的关键网络安全趋势 > AI驱动的网络威胁 – 黑客正在利用人工智能(AI)发动复杂的攻击,使…

    好文分享 2025年12月19日
    000
  • 使用OpenAI API在JavaScript中创建文本到语音AI代理

    简介 想要用AI将文本转换成语音?OpenAI的文本转语音(TTS)API让开发者能够轻松生成高质量的语音。本文将指导您使用OpenAI API在JavaScript中创建一个简单的AI驱动TTS代理,最终实现文本到语音的播放功能。 前提条件 开始之前,请确保您已安装Node.js(下载地址:此处)…

    2025年12月19日
    000
  • NextJS重定向到另一页教程

    Next.js 提供多种方法实现页面重定向,无论您构建的是客户端还是服务器端应用,都能轻松实现页面间的无缝跳转。本指南将介绍几种基于最新文档的 Next.js 重定向方法。 使用 redirect() 函数(服务器组件和 API 路由) Next.js 内置的 redirect() 函数主要用于服务…

    2025年12月19日
    000
  • 与发bun活着重新加载html

    this article demonstrates how to create a simple live reload mechanism for html content using bun’s built-in http server and server-sent events …

    2025年12月19日
    000

发表回复

登录后才能评论
关注微信