微前端的不断探索之路—— qiankun 实战与思考!

全文目录:

    • 开篇语
    • 📝 前言
    • 🛠️ 微前端是什么?为什么需要它?
      • 💡 先从“前端痛点”说起
      • 🧐 微前端的优势
    • 🤹‍♀️ qiankun 简介与核心概念
      • 🌟 为什么选择 qiankun?
      • 📖 核心概念
    • 🖥️ qiankun 实战案例——从 0 到 1 实现微前端
      • 🎯 案例目标
      • 📂 项目结构
      • 🚀 实现步骤
        • **1. 主应用开发**
        • **2. 子应用开发**
    • 📈 进阶拓展:微前端的最佳实践
      • 🛡️ 样式隔离
      • 🧩 共享数据
    • 🎉 总结
    • 文末

开篇语

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛

  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。

  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。

小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!

📝 前言

前端世界的技术更新频率就像是一场没有终点的马拉松,快到你刚熟悉一个框架,下一个趋势就已经掀起了新的浪潮。而近年来,微前端作为“架构界的顶流”,用它的灵活性和模块化特性给我们带来了全新的开发思路。

今天,咱们就来聊聊微前端框架中的**“网红”选手**——qiankun。从它的基础概念到实战案例,再到我们在实际开发中的一些思考,希望带你更深地感受这个框架的魅力。


🛠️ 微前端是什么?为什么需要它?

💡 先从“前端痛点”说起

在前端项目逐渐复杂化后,我们常会遇到以下问题:

  1. 大而全的单体应用:代码膨胀到让人想辞职;
  2. 团队协作的尴尬:多个团队一起开发时,分工不清、冲突频繁;
  3. 技术栈的约束:新旧项目技术栈不统一,升级是场噩梦。

微前端的出现就是为了解决这些问题,简单来说,它就是把前端项目“拆分成小块”,让每个块独立开发、独立运行,最后再把它们整合到一起。

🧐 微前端的优势

  • 独立性:每个子应用可以独立运行、部署,甚至使用不同的框架。
  • 技术栈自由:团队 A 用 React,团队 B 用 Vue?完全没问题!
  • 渐进式升级:老旧的代码不用全盘推翻,可以逐步替换。

🤹‍♀️ qiankun 简介与核心概念

🌟 为什么选择 qiankun?

qiankun 是基于 single-spa 的微前端实现,拥有以下优点:

  • 简单易用:开箱即用,几乎没有学习成本;
  • 完整性:解决了主流微前端框架的坑点,比如样式隔离、JS 沙箱等;
  • 文档友好:中文社区给了我们无比友好的学习环境。

📖 核心概念

  1. 主应用与子应用
    主应用负责整体布局和子应用的加载,子应用专注于自己的功能开发。

  2. 沙箱机制
    通过沙箱隔离子应用之间的样式、JS,避免冲突。

  3. 生命周期
    qiankun 会为子应用提供生命周期钩子,比如 mountunmount,让你可以精准控制它的加载与卸载。


🖥️ qiankun 实战案例——从 0 到 1 实现微前端

🎯 案例目标

实现一个简单的微前端项目,包括:

  1. 主应用使用 Vue 实现;
  2. 子应用分别使用 React 和 Vue。

📂 项目结构

micro-frontend-demo/
├── main-app/        # 主应用(Vue)
├── sub-app-react/   # 子应用1(React)
├── sub-app-vue/     # 子应用2(Vue)

🚀 实现步骤

1. 主应用开发

主应用技术栈:Vue3 + qiankun

  1. 安装依赖

    npm install qiankun --save
    
  2. 主应用代码实现

    // main.js
    import { createApp } from 'vue';
    import App from './App.vue';
    import { registerMicroApps, start } from 'qiankun';const app = createApp(App);// 注册子应用
    registerMicroApps([{name: 'sub-app-react',entry: '//localhost:3000',  // 子应用的入口container: '#sub-app-container', // 子应用挂载的容器activeRule: '/react', // 激活规则},{name: 'sub-app-vue',entry: '//localhost:8081',container: '#sub-app-container',activeRule: '/vue',},
    ]);// 启动 qiankun
    start();app.mount('#app');
    
  3. 主应用的页面

    <template><div><h1>主应用</h1><nav><a href="/react">React 子应用</a><a href="/vue">Vue 子应用</a></nav><div id="sub-app-container"></div></div>
    </template>
    
2. 子应用开发

子应用 1:React

  1. 配置入口
    package.json 中添加:

    {"name": "sub-app-react","main": "index.js","homepage": "/react"
    }
    
  2. 生命周期钩子

    import ReactDOM from 'react-dom';
    import App from './App';function render() {ReactDOM.render(<App />, document.getElementById('root'));
    }if (!window.__POWERED_BY_QIANKUN__) {render();
    }export async function bootstrap() {console.log('React app bootstraped');
    }export async function mount() {render();
    }export async function unmount() {ReactDOM.unmountComponentAtNode(document.getElementById('root'));
    }
    

子应用 2:Vue
类似 React,只需调整为 Vue 的生命周期钩子即可。


📈 进阶拓展:微前端的最佳实践

🛡️ 样式隔离

使用 qiankun 提供的样式隔离能力,防止主应用和子应用之间的 CSS 冲突。

🧩 共享数据

利用 qiankun 的通信 API 实现主应用与子应用之间的数据共享。例如:

// 主应用中
import { initGlobalState } from 'qiankun';const actions = initGlobalState({user: 'Alice',
});actions.onGlobalStateChange((state) => {console.log('主应用监听到状态变化:', state);
});// 子应用中
import { getActions } from 'qiankun';const actions = getActions();
actions.setGlobalState({ user: 'Bob' });

🎉 总结

微前端的魅力在于将复杂拆解为简单,而 qiankun 则以其易用性和稳定性成为了开发者的最佳选择。在本文中,我们从理论到实践,全方位体验了 qiankun 的强大功能。不仅如此,我们还探讨了它在实际开发中的一些进阶玩法。

🌟 如果你还在为前端项目的复杂性头疼,不妨试试微前端!期待你的探索之路更有趣、更高效。

… …

文末

好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。

… …

学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!


⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。
⭐️若有疑问,就请评论留言告诉我叭。


版权声明:本文由作者原创,转载请注明出处,谢谢支持!

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

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

相关文章

拆解加密黑盒

在Web安全与数据爬取领域&#xff0c;JavaScript加密黑盒的逆向工程是核心技术之一。本文基于行业通用方法论与实战案例&#xff0c;提炼出一套标准化的五步逆向流程&#xff0c;涵盖目标定位、代码提取、逻辑分析、算法复现到自动化集成的全链路解决方案&#xff0c;帮助开发者…

IntelliJ IDEA 中安装和使用通义灵码 AI 编程助手教程

随着人工智能技术的发展&#xff0c;AI 编程助手逐渐成为提升开发效率的强大工具。通义灵码是阿里云推出的一款 AI 编程助手&#xff0c;它能够帮助开发者实现智能代码补全、代码解释、生成单元测试等功能&#xff0c;极大地提升了编程效率和代码质量。 IntelliJ IDEA 是一款广…

Redis 特性和应用场景

1. Redis特性 1&#xff09;In-memory data structures Redis 在内存中存储数据&#xff0c;key 是 String&#xff0c; value 可以是 hash, list, set, sorted set, stream ... MySQL主要是通过 “表” 的方式来存储组织数据的 “关系型数据库” Redis主要是通过 “键值对”…

每天五分钟深度学习:非线性激活函数的导数

本文重点 本文探讨了神经网络中几种常见非线性激活函数(Sigmoid、Tanh、ReLU、Leaky ReLU、ELU、Softmax)的导数特性。通过对各激活函数导数的数学推导与实际应用分析,揭示了不同激活函数在梯度传播、收敛速度及模型表达能力方面的差异。研究发现,ReLU及其变体在计算效率与…

redis哨兵机制 和集群有什么区别:

主从&#xff1a; 包括一个master节点 和多个slave节点&#xff1a; master节点负责数据的读写&#xff0c;slave节点负责数据的读取&#xff0c;master节点收到数据变更&#xff0c;会同步到slave节点 去实现数据的同步。通过这样一个架构可以去实现redis的一个读写分离。提升…

关于读完《毛泽东选集》的一些思考迭代

看完毛选前四卷&#xff0c;从革命初期一直讲到抗战胜利&#xff0c;共75.8W字&#xff0c;花费67个小时读完。从1925年发表的“中国社会各阶级的分析”&#xff0c;跨越100年&#xff0c;通过67个小时向主席学习到&#xff1a; 实事求是 从实践中来再到实践中去 用辩证与发展…

MySQL——MVCC(多版本并发控制)

目录 1.MVCC多版本并发控制的一些基本概念 MVCC实现原理 记录中的隐藏字段 undo log undo log 版本链 ReadView 数据访问规则 具体实现逻辑 总结 1.MVCC多版本并发控制的一些基本概念 当前读&#xff1a;该取的是记录的最新版本&#xff0c;读取时还要保证其他并发事务…

【Linux篇】深入理解文件系统:从基础概念到 ext2 文件系统的应用与解析

文件系统的魔法&#xff1a;让计算机理解并存储你的数据 一. 文件系统1.1 块1.2 分区1.3 inode(索引节点) 二. ext2文件系统2.1 认识文件系统2.2 Block Group (块组)2.2.1 Block Group 的基本概念2.2.2 Block Group 的作用 2.3 块组内部结构2.3.1 超级块&#xff08;Super Bloc…

3 VS Code 配置优化与实用插件推荐:settings.json 详解、CodeGeeX 智能编程助手及插件离线安装方法

1 优化 settings.json 文件 1.1 settings.json 简介 settings.json 是 VS Code 的核心配置文件&#xff0c;用于存储用户的个性化设置和偏好。通过该文件&#xff0c;用户可以自定义和覆盖 VS Code 的默认行为&#xff0c;包括但不限于以下方面&#xff1a; 编辑器外观&#…

【Java面试系列】Spring Cloud微服务架构中的分布式事务处理与Seata框架实现原理详解 - 3-5年Java开发必备知识

【Java面试系列】Spring Cloud微服务架构中的分布式事务处理与Seata框架实现原理详解 - 3-5年Java开发必备知识 1. 引言 在微服务架构中&#xff0c;分布式事务处理是一个复杂且常见的问题。随着业务规模的扩大&#xff0c;单体应用逐渐拆分为多个微服务&#xff0c;每个服务…

力扣面试150题--有效的数独

Day 19 题目描述 思路 其实还挺简单的&#xff0c;主要的难点在于如何判断每个小数独是否满足要求 详细见代码 class Solution {public boolean isValidSudoku(char[][] board) {HashSet<Character> set new HashSet<>();//处理行HashSet<Character> set1…

达梦数据库-学习-15-大内存SQL相关视图介绍

目录 一、环境信息 二、介绍 三、数据字典表 1、V$MEM_POOL 2、V$SQL_STAT 3、V$SQL_STAT_HISTORY 4、V$LARGE_MEM_SQLS 5、V$SYSTEM_LARGE_MEM_SQLS 四、总结 一、环境信息 名称值CPU12th Gen Intel(R) Core(TM) i7-12700H操作系统CentOS Linux release 7.9.2009 (Co…

从0到1使用C++操作MSXML

1. 引言 MSXML&#xff08;Microsoft XML Core Services&#xff09;是微软提供的一套用于处理XML的COM组件库&#xff0c;广泛应用于Windows平台的XML解析、验证、转换等操作。本文将详细介绍如何从零开始&#xff0c;在C中使用MSXML解析和操作XML文件&#xff0c;包含完整的…

Windows 系统下用 VMware 安装 CentOS 7 虚拟机超详细教程(包含VMware和镜像安装包)

前言 资源 一、准备工作 &#xff08;一&#xff09;下载 VMware Workstation &#xff08;二&#xff09;下载 CentOS 7 镜像 二、安装 VMware Workstation&#xff08;比较简单&#xff0c;按下面走即可&#xff09; 三、创建 CentOS 7 虚拟机 四、安装 CentOS 7 系统…

应用安全系列之四十五:日志伪造(Log_Forging)之三

1、简介 针对Java的日志系统有多种&#xff0c;本文主要描述如何通过修改配置文件来解决logback和log4j的日志伪造问题。 2、logback 2.1、系统提供的解决方案 在logback.xml中配置编码器自动转义特殊字符&#xff1a; 复制 <configuration><appender name"C…

(五)循环链表、双向链表

循环链表 介绍 在单选链表基础上&#xff0c;下一个节点指向前一个节点&#xff0c;最后一个节点指向起点 封装循环链表 为了让循环链表可以继承自单向链表&#xff0c;对其进行重构 给其增加一个tail属性&#xff08;尾节点&#xff09;&#xff0c;对各方法进行重写整理 …

仙剑奇侠传98柔情版游戏秘籍

战斗秘技&#xff1a;在战斗中输入 “cheat”&#xff0c;然后输入 “v” 直接取胜&#xff1b;输入 “y” 敌人不攻击。另外&#xff0c;在战斗中按 “XJPXZ123” 加 “shift” 键&#xff0c;攻击力增加 1000&#xff05;。等级提升秘籍&#xff1a;当李逍遥等级到达 99 级时…

常见的归一化(Normalization)方法

本文详解深度学习中常见的归一化方法。 【归一化是将数据按比例缩放&#xff0c;使之落入一个特定的区间】目录 1. 批量归一化&#xff08;Batch Normalization&#xff0c;BN&#xff09;1.1 数学原理1.2 代码示例 2. 层归一化&#xff08;Layer Normalization&#xff0c;LN&…

行星际激波在日球层中的传播:Propagation of Interplanetary Shocks in the Heliosphere (参考文献部分)

行星际激波在日球层中的传播&#xff1a;Propagation of Interplanetary Shocks in the Heliosphere &#xff08;第一部分&#xff09;-CSDN博客 行星际激波在日球层中的传播&#xff1a;Propagation of Interplanetary Shocks in the Heliosphere &#xff08;第二部分&…

大模型可视化应用敏捷开发方案:Dify+Echarts

大模型相关目录 大模型&#xff0c;包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步&#xff0c;扬帆起航。 Moe模式&#xff1a;或将是最好的大模型应用开发路径一文带你了解大模型RAG详细记录…