微前端框架是为了解决项目应用在大型项目中带来的复杂性和维护难题而提出的技术方案。

news2024/11/17 23:44:31

微前端框架是为了解决单页应用(SPA)在大型项目中带来的复杂性和维护难题而提出的技术方案。Qiankun.jsMicroAppWujie 是三种流行的微前端框架。以下是对这三种框架的优缺点分析:
在这里插入图片描述

Qiankun.js

优点
  1. 成熟度高:Qiankun.js 基于 Single-SPA,并针对中国开发者进行了优化和本地化,已经得到了广泛的应用和验证。
  2. 生态系统完善:提供了丰富的插件和工具链,支持快速集成和上手。
  3. 框架无关性:支持 React、Vue、Angular 等多种主流前端框架,可以在同一个项目中同时使用多种技术栈。
  4. 灵活性强:可以自由选择是否使用沙箱隔离、应用加载策略等,满足不同场景需求。
  5. 社区活跃:有较多的社区资源和支持,问题解决较快。
缺点
  1. 复杂度高:由于其功能强大,配置和使用相对复杂,对开发者的技术要求较高。
  2. 性能开销:在某些场景下,沙箱隔离机制会带来一定的性能开销。

MicroApp

优点
  1. 轻量级:MicroApp 体积小,性能较好,适合对性能要求较高的项目。
  2. 简单易用:上手简单,API 设计清晰,开发成本低。
  3. 兼容性好:支持各种主流前端框架,并且能够与现有项目无缝集成。
  4. 灵活性强:提供灵活的加载和卸载机制,支持动态应用加载。
缺点
  1. 功能较少:相比 Qiankun.js,MicroApp 的功能相对较少,不支持某些高级特性。
  2. 社区资源较少:社区相对不够活跃,遇到问题时可能需要更多时间解决。

Wujie

优点
  1. 高度隔离:Wujie 强调应用间的高度隔离,保证各个子应用之间不会互相影响。
  2. 高性能:针对性能进行了优化,适合对性能要求较高的项目。
  3. 现代化设计:采用现代化的设计思想,支持最新的前端技术和工具链。
缺点
  1. 相对较新:相较于 Qiankun.js 和 MicroApp,Wujie 较为新颖,社区和生态系统尚在发展中。
  2. 文档和支持:由于其新颖性,文档和支持可能不如 Qiankun.js 完善。

总结

  • Qiankun.js 适合大型项目和复杂场景,功能全面,但使用复杂度较高。
  • MicroApp 适合中小型项目,追求轻量级和高性能,功能相对较少。
  • Wujie 适合现代化前端项目,强调隔离和性能,但社区资源和支持尚待发展。

1. Qiankun.js

安装
npm install qiankun
基本使用方法
  1. 主应用配置

在主应用中,配置 qiankun 并注册子应用:

import { registerMicroApps, start } from 'qiankun';

registerMicroApps([
  {
    name: 'reactApp',
    entry: '//localhost:7100',
    container: '#container',
    activeRule: '/react',
  },
  {
    name: 'vueApp',
    entry: '//localhost:7101',
    container: '#container',
    activeRule: '/vue',
  },
]);

start();
  1. 子应用配置

在子应用中,添加 qiankun 的生命周期函数:

import './public-path';
import Vue from 'vue';
import App from './App.vue';

Vue.config.productionTip = false;

let instance = null;
function render(props = {}) {
  const { container } = props;
  instance = new Vue({
    render: h => h(App),
  }).$mount(container ? container.querySelector('#app') : '#app');
}

if (!window.__POWERED_BY_QIANKUN__) {
  render();
}

export async function bootstrap() {
  console.log('Vue app bootstraped');
}
export async function mount(props) {
  render(props);
}
export async function unmount() {
  instance.$destroy();
  instance = null;
}
  1. 主应用中加载子应用的 HTML 文件
<div id="container"></div>
更多功能
  • 沙箱隔离qiankun 支持多种沙箱隔离策略,可以在注册子应用时配置。
  • 全局状态管理:可以通过 qiankun 提供的 initGlobalState 方法进行全局状态管理。

2. MicroApp

安装
npm install @micro-zoe/micro-app
基本使用方法
  1. 主应用配置

在主应用中,引入并使用 MicroApp

import microApp from '@micro-zoe/micro-app';

microApp.start();

在 HTML 中嵌入子应用:

<micro-app name="vue-app" url="http://localhost:7101/"></micro-app>
<micro-app name="react-app" url="http://localhost:7100/"></micro-app>
  1. 子应用配置

在子应用中无需特殊配置,只需正常开发应用,确保入口文件(如 index.html)能够被主应用访问即可。

更多功能
  • 应用间通信:使用 microApp 提供的通信接口可以实现主应用和子应用间的通信。
  • 加载策略:可以配置子应用的加载和卸载策略。

3. Wujie

安装
npm install wujie
基本使用方法
  1. 主应用配置

在主应用中,引入并使用 Wujie

import { createWujieApp } from 'wujie';

const app = createWujieApp({
  el: '#app',
  apps: [
    {
      name: 'vueApp',
      url: 'http://localhost:7101/',
      container: '#container',
      activeRule: '/vue',
    },
    {
      name: 'reactApp',
      url: 'http://localhost:7100/',
      container: '#container',
      activeRule: '/react',
    },
  ],
});

app.start();
  1. 子应用配置

在子应用中无需特殊配置,只需正常开发应用,确保入口文件(如 index.html)能够被主应用访问即可。

更多功能
  • 应用隔离:Wujie 强调应用间的高度隔离,确保不同子应用之间不会互相影响。
  • 性能优化:Wujie 进行了大量性能优化,适合对性能要求较高的项目。

虚拟路由(Virtual Routing)在微前端框架中起着关键作用,它允许主应用和子应用之间协调 URL 路由的变化,以便用户在访问某个路径时,能够正确加载对应的子应用。下面分别介绍 Qiankun.jsMicroAppWujie 这三种微前端框架的虚拟路由使用方式及优缺点。

1. Qiankun.js

虚拟路由使用方式

Qiankun 中,主应用和子应用都可以拥有自己的路由系统。主应用使用路由来激活不同的子应用,而子应用本身也可以有独立的路由。

  • 主应用配置

在主应用中,通过 registerMicroApps 注册子应用时,指定 activeRule 来匹配 URL 路径:

import { registerMicroApps, start } from 'qiankun';

registerMicroApps([
  {
    name: 'reactApp',
    entry: '//localhost:7100',
    container: '#container',
    activeRule: '/react',
  },
  {
    name: 'vueApp',
    entry: '//localhost:7101',
    container: '#container',
    activeRule: '/vue',
  },
]);

start();
  • 子应用配置

子应用可以使用各自的路由库(如 react-routervue-router)来管理内部路由。

// Vue 子应用示例
import Vue from 'vue';
import Router from 'vue-router';
import App from './App.vue';
import routes from './routes';

Vue.use(Router);

const router = new Router({ routes });

new Vue({
  router,
  render: h => h(App)
}).$mount('#app');
优缺点分析
  • 优点

    • 灵活性高,主应用和子应用都可以独立管理自己的路由。
    • 子应用可以使用自己熟悉的路由库,无需对现有代码进行大幅修改。
  • 缺点

    • 需要手动处理主应用和子应用的路由切换,尤其是嵌套多层子应用时,配置和管理较复杂。
    • 对于复杂的路由场景,主应用和子应用之间的 URL 同步和参数传递可能会比较麻烦。

2. MicroApp

虚拟路由使用方式

MicroApp 支持子应用的独立路由,同时通过 micro-app 标签来嵌入子应用,并且子应用可以与主应用路由进行联动。

  • 主应用配置

在主应用中,直接使用 micro-app 标签来嵌入子应用。

<!-- 主应用 HTML -->
<micro-app name="vue-app" url="http://localhost:7101/"></micro-app>
<micro-app name="react-app" url="http://localhost:7100/"></micro-app>
  • 子应用配置

子应用依然可以使用各自的路由库来管理路由。

// React 子应用示例
import React from 'react';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
import App from './App';

const Root = () => (
  <Router>
    <Switch>
      <Route path="/" component={App} />
    </Switch>
  </Router>
);

export default Root;
优缺点分析
  • 优点

    • 使用方式简单,主应用和子应用之间路由解耦,子应用可以独立开发和调试。
    • 子应用可以使用自己熟悉的路由库,减少学习成本。
  • 缺点

    • 主应用与子应用的路由联动可能需要额外处理。
    • 对于复杂的路由场景,可能需要额外的逻辑来处理 URL 同步和参数传递。

3. Wujie

虚拟路由使用方式

Wujie 强调应用间的高度隔离,同时提供灵活的路由管理方案。主应用和子应用都可以独立管理自己的路由。

  • 主应用配置

在主应用中,通过 createWujieApp 注册子应用,并指定 URL 和容器。

import { createWujieApp } from 'wujie';

const app = createWujieApp({
  el: '#app',
  apps: [
    {
      name: 'vueApp',
      url: 'http://localhost:7101/',
      container: '#container',
      activeRule: '/vue',
    },
    {
      name: 'reactApp',
      url: 'http://localhost:7100/',
      container: '#container',
      activeRule: '/react',
    },
  ],
});

app.start();
  • 子应用配置

子应用可以使用各自的路由库来管理路由。

// Vue 子应用示例
import Vue from 'vue';
import Router from 'vue-router';
import App from './App.vue';
import routes from './routes';

Vue.use(Router);

const router = new Router({ routes });

new Vue({
  router,
  render: h => h(App)
}).$mount('#app');
优缺点分析
  • 优点

    • 强调应用间的隔离,主应用和子应用都可以独立管理路由,减少互相干扰。
    • 子应用可以使用自己熟悉的路由库,无需对现有代码进行大幅修改。
  • 缺点

    • 需要额外处理主应用和子应用的路由联动,尤其是在路径同步和参数传递方面。
    • 对于复杂的路由场景,可能需要额外的逻辑来处理 URL 同步和状态管理。

总结

  • Qiankun.js 提供灵活的路由管理方案,但需要手动处理主应用和子应用的路由切换,适合大型复杂项目。
  • MicroApp 使用简单,主应用和子应用解耦,适合中小型项目,但路由联动需要额外处理。
  • Wujie 强调应用隔离,使用灵活,但需要额外处理路由联动,适合现代前端项目。

压图地址

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1867875.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

麦克风什么牌子的音质效果好?揭秘领夹麦克风哪个牌子音质好

近年来&#xff0c;随着网络直播、短视频、网课等新兴行业的兴起&#xff0c;大家对麦克风的需求量不断增加。而领夹麦克风作为一种轻便、便携的录音设备&#xff0c;也是得到了广大用户的青睐。一款优质的领夹麦克风能够带来更清晰、更真实的声音效果&#xff0c;让我们在在各…

SAP ABAP 常用实用类

文章目录 前言一、输出 展示 数据信息 a.将 JSON 格式化为可读 并以弹框形式输出 b.将内表内容以表格形式输出 c.弹框形式显示 HTML 内容。也能显示包含js 的html。也可以显示pdf 图片 二、输入 获取 数据信息 a.弹框 添加 输入框…

python e怎么表示

exp()方法返回x的指数&#xff0c;ex。 语法 以下是 exp() 方法的语法: import math math.exp( x ) 注意&#xff1a;exp()是不能直接访问的&#xff0c;需要导入 math 模块&#xff0c;通过静态对象调用该方法。 参数 x -- 数值表达式。 返回值 返回x的指数&#xff0c;…

怎样恢复数据?原来只要3个方法,真是救大命了

无论是工作文件&#xff0c;还是个人的照片、视频&#xff0c;手机数据都承载着我们的记忆和努力。但如果不小心删除了&#xff0c;我们该怎样恢复数据呢&#xff1f;其实&#xff0c;恢复数据并不是一件复杂的事情&#xff0c;只要掌握正确的方法&#xff0c;我们就能有效地找…

Amazon Q:对话智能赋能企业发展

在最近举办的亚马逊云科技大会上&#xff0c;引人瞩目的消息是 Amazon Q 的推出&#xff0c;这是一款专注于生成式 AI 支持的新型助手。与其他智能助手相比&#xff0c;Amazon Q 助手聚焦在办公场景&#xff0c;具有针对性&#xff0c;旨在提供更为准确和个性化的服务。 一、Am…

TikTok短视频矩阵系统

随着数字化时代的到来&#xff0c;短视频已成为人们获取信息、娱乐消遣的重要渠道。TikTok&#xff0c;作为全球最受欢迎的短视频平台之一&#xff0c;其背后的短视频矩阵系统是支撑其成功的关键因素。本文将深入探讨TikTok短视频矩阵系统的构成、功能以及它在新媒体时代中的影…

面试-Java线程池

1.利用Excutors创建不同的线程池满足不同场景的需求 分析&#xff1a; 如果并发的请求的数量非常多&#xff0c;但每个线程执行的时间非常短&#xff0c;这样就会频繁的创建和销毁线程。如此一来&#xff0c;会大大降低系统的效率。 可能出现&#xff0c;服务器在为每个线程创建…

【Python实战因果推断】2_因果效应异质性2

目录 CATE with Regression Evaluating CATE Predictions CATE with Regression 我想你可能已经预料到了&#xff1a;与应用因果推理中的大多数情况一样&#xff0c;答案往往从线性回归开始。但在走这条路之前&#xff0c;让我们把事情变得更具体一些。假设你在一家遍布全国的…

python API自动化(Pytest+Excel+Allure完整框架集成+yaml入门+大量响应报文处理及加解密、签名处理)

1.pytest数据参数化 假设你需要测试一个登录功能&#xff0c;输入用户名和密码后验证登录结果。可以使用参数化实现多组输入数据的测试: 测试正确的用户名和密码登录成功 测试正确的用户名和错误的密码登录失败 测试错误的用户名和正确的密码登录失败 测试错误的用户名和密码登…

NoSQL之Redis配置与管理

目录 一、关系型数据库和非关系型数据库 1.关系型数据库 2.非关系型数据库 3.关系型数据库和非关系型数据库区别 二、Redis 1.Redis简介 2.Redis 的优点 3.Redis 使用场景 4.Redis的数据类型 5.哪些数据适合放入缓存中&#xff1f; 6.Redis为什么这么快&#xff1f;…

Uniapp的使用

为什么要使用uniapp uniapp 可以进行多端开发&#xff0c;uniapp 在设计的时候就拥有许多兼容性代码&#xff0c;可以兼容很多的平台 如 支付宝小程序 html页面 微信小程序等&#xff0c;注重开发效率而不是运行效率时 &#xff0c;就可以考虑一下 uniapp 当然也可以去…

08 元组和集合

目录 一、元组&#xff08;tuple&#xff09; 1. 什么是元组 2. 查操作 3. 函数和方法 二、集合&#xff08;set&#xff09; 1. 什么是集合 2. 数学集合运算 一、元组&#xff08;tuple&#xff09; 1. 什么是元组 元组是容器型数据类型&#xff0c;将( )作为容器的标…

嵌入式学习——硬件(ARM内核汇编指令)——day52

ARM汇编指令 学习arm汇编的主要目的是为了编写arm启动代码&#xff0c;启动代码启动以后&#xff0c;引导程序到c语言环境下运行。换句话说启动代码的目的是为了在处理器复位以后搭建c语言最基本的需求。因此启动代码的主要任务有&#xff1a; 初始化异常向量表&#xff1b;初…

强大的资源提取工具

一、简介 1、是一款功能强大的文件提取工具&#xff0c;它可以从多种不同类型的存档文件或安装程序中提取文件&#xff0c;包括但不限于ZIP、RAR、7z、ISO等格式。这款软件的独特之处在于它不仅能够处理常规的压缩文件&#xff0c;还能处理各种软件安装程序&#xff0c;甚至是加…

TMGM外汇平台: 纽元未来走势,新西兰即将降息

2024年6月26日&#xff0c;全球金融市场对新西兰联储即将采取的货币政策持续关注。分析师普遍预估新西兰将实施降息政策&#xff0c;这一政策调整预计将对新西兰元&#xff08;纽元&#xff09;的国际交易价值产生重大影响。本文将TMGM深入探讨新西兰经济的当前状况&#xff0c…

java:spring-security的简单例子

【pom.xml】 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.3.12.RELEASE</version> </dependency> <dependency><groupId>org.springf…

java使用Graphics2D生成图片

UI图 实际图片数据库中只存了一个二维码转的base64的数组,直接导出只有一个二维码 这里使用 Graphics2D 画图 public static void main(String[] args) {// 假设你有一个Base64编码的字符串&#xff0c;它表示一张图片String base64ImageString "/9j/4AAQSkZJRgABAgAAA…

考研数学(4/9):微分方程

微分方程 微分方程是高等数学中一个重要的分支&#xff0c;也是考研数学数一中必考的内容。本章主要介绍微分方程的概念、一阶微分方程、高阶线性微分方程以及微分方程的应用。 1. 微分方程的概念 1.1 微分方程的定义 微分方程 是指包含未知函数及其导数的方程。 更准确地说&am…

【数学建模】——【python库】——【Pandas学习】

专栏&#xff1a;数学建模学习笔记 pycharm专业版免费激活教程见资源&#xff0c;私信我给你发 python相关库的安装&#xff1a;pandas,numpy,matplotlib&#xff0c;statsmodels 总篇&#xff1a;【数学建模】—【新手小白到国奖选手】—【学习路线】 第一卷&#xff1a;【数学…

老板电器 45 年的烹饪经验,浓缩在这款烹饪大模型中

在科技不断进步的时代&#xff0c;人工智能&#xff08;AI&#xff09;迅速成为推动各行各业发展的重要力量。家电行业也不例外&#xff0c;根据 Gartner 的报告预测&#xff0c;到 2024 年&#xff0c;AI 家电市场的规模将达到万亿美元级别。这一预估凸显了智能化在家电行业中…