前端微前端:大型应用的模块化解决方案

前端微前端:大型应用的模块化解决方案

毒舌时刻

前端微前端?这不是过度设计吗?

"我的应用不大,不需要微前端"——结果应用越来越大,维护困难,
"微前端太复杂了,不如一个大单体"——结果团队协作困难,部署冲突,
"我用iframe就够了"——结果性能差,用户体验差。

醒醒吧,微前端不是银弹,但对于大型应用来说,它是一个有效的解决方案!

为什么你需要这个?

  • 团队协作:不同团队可以独立开发和部署
  • 技术栈灵活:不同微前端可以使用不同的技术栈
  • 独立部署:单个微前端可以独立部署,不影响其他部分
  • 可扩展性:可以轻松添加新的微前端

反面教材

<!-- 反面教材:使用iframe实现微前端 --> <!DOCTYPE html> <html> <head> <title>主应用</title> </head> <body> <h1>主应用</h1> <!-- 使用iframe加载微前端 --> <iframe src="https://micro-app1.example.com"></iframe> <iframe src="https://micro-app2.example.com"></iframe> </body> </html> 

正确的做法

// 正确的做法:使用Module Federation // 主应用webpack配置 const { ModuleFederationPlugin } = require('webpack').container; module.exports = { plugins: [ new ModuleFederationPlugin({ name: 'host', remotes: { microApp1: 'microApp1@http://localhost:3001/remoteEntry.js', microApp2: 'microApp2@http://localhost:3002/remoteEntry.js' }, shared: { react: { singleton: true, requiredVersion: '^18.0.0' }, 'react-dom': { singleton: true, requiredVersion: '^18.0.0' } } }) ] }; // 微应用1webpack配置 const { ModuleFederationPlugin } = require('webpack').container; module.exports = { plugins: [ new ModuleFederationPlugin({ name: 'microApp1', filename: 'remoteEntry.js', exposes: { './App': './src/App' }, shared: { react: { singleton: true, requiredVersion: '^18.0.0' }, 'react-dom': { singleton: true, requiredVersion: '^18.0.0' } } }) ] }; // 主应用中使用微应用 import React, { lazy, Suspense } from 'react'; // 懒加载微应用 const MicroApp1 = lazy(() => import('microApp1/App')); const MicroApp2 = lazy(() => import('microApp2/App')); function App() { return ( <div> <h1>主应用</h1> <Suspense fallback={<div>加载中...</div>}> <MicroApp1 /> <MicroApp2 /> </Suspense> </div> ); } // 正确的做法:使用Single-SPA // 主应用配置 import { registerApplication, start } from 'single-spa'; // 注册微应用 registerApplication({ name: 'micro-app-1', app: () => import('@org/micro-app-1'), activeWhen: (location) => location.pathname.startsWith('/micro-app-1'), customProps: { authToken: 'token' } }); registerApplication({ name: 'micro-app-2', app: () => import('@org/micro-app-2'), activeWhen: (location) => location.pathname.startsWith('/micro-app-2') }); // 启动应用 start(); // 微应用配置 import { mountRootParcel } from 'single-spa'; // 导出生命周期函数 export const bootstrap = async () => { console.log('微应用1启动'); }; export const mount = async (props) => { console.log('微应用1挂载', props); // 挂载应用 const el = document.getElementById('micro-app-1'); // 渲染应用 return Promise.resolve(); }; export const unmount = async () => { console.log('微应用1卸载'); // 卸载应用 return Promise.resolve(); }; 

毒舌点评

看看,这才叫前端微前端!不是简单地使用iframe,而是使用Module Federation或Single-SPA等专业的微前端方案。

记住,微前端不是为了拆分而拆分,而是为了解决大型应用的维护和协作问题。它需要合理的架构设计和团队协作。

所以,别再觉得微前端复杂了,它是大型应用的必然选择!

总结

  • Module Federation:Webpack 5的内置功能,支持模块共享
  • Single-SPA:最早的微前端框架,支持多种技术栈
  • Qiankun:基于Single-SPA的微前端方案,提供了更多功能
  • 独立部署:每个微前端可以独立构建和部署
  • 技术栈灵活:不同微前端可以使用不同的技术栈
  • 模块共享:共享公共依赖,减少重复加载
  • 路由管理:统一的路由管理,实现微前端间的导航
  • 状态管理:跨微前端的状态管理方案

微前端,让大型应用的开发和维护变得更加简单!

Read more

前端网页开发学习(HTML+CSS+JS)有这一篇就够!

前端网页开发学习(HTML+CSS+JS)有这一篇就够!

目录 HTML教程 ▐ 概述 ▐ 基础语法 ▐ 文本标签 ▐ 列表标签  ▐ 表格标签 ▐ 表单标签 CSS教程 ▐ 概述 ▐ 基础语法 ▐ 选择器 ▐ 修饰文本 ▐ 修饰背景 ▐ 透明度 ▐ 伪类 ▐ 盒子模型 ▐ 浮动 ▐ 定位 JavaScript教程 ▐ 概述 ▐ 基础语法 ▐ 函数 ▐ 事件 ▐ 计时   ▐ HTML DOM html css js三者之间的关系 HTML教程 ▐ 概述 HTML是HyperText  Markup  Language的缩写,即超文本标记语言。它为我们提供了许多功能不同的标签,最终运行时由浏览器对标签进行解析,呈现出不同标签的样子。 ▐ 基础语法 注释:  <!--   -->        ( Ctrl + / ) <body> <

【GitHub Copilot】Figma MCP还原设计稿生成前端代码

【GitHub Copilot】Figma MCP还原设计稿生成前端代码

这里写自定义目录标题 * Step1:让AI给你配置MCP * Step2:替换成自己的Figma密钥 * Step3:如何使用 Cursor+Figma MCP的教程已经很多了,由于我所在的公司采购的是GitHub Copilot,我研究了一下直接在vscode里利用GitHub Copilot接入Figma MCP进行设计稿还原代码,大获成功,这里分享我的步骤,希望能帮到你。 Step1:让AI给你配置MCP 在vscode中打开你的项目(我的例子是一个微信小程序),呼出github copilot对话框,模式选择Agent,模型建议Claude 3.7 Sonnet,提问: https://github.com/GLips/Figma-Context-MCP 如何配置能让你在vscode里使用这个mcp 之后跟着提示狂点下一步即可完成配置,如果有什么需要装的vscode插件它会自动帮你装,甚至自动生成了配置说明文档。 由于不能保证AI每次生成的答案都一致,这里附上我的运行结果作为参考,可以看到它在项目文件夹最外层建了一个.vscode文件夹,在sett

二手车交易系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】

二手车交易系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】

摘要 随着互联网技术的快速发展和汽车保有量的持续增长,二手车交易市场逐渐成为汽车流通领域的重要组成部分。传统二手车交易模式存在信息不对称、交易效率低下、管理成本高等问题,亟需通过信息化手段优化交易流程。二手车交易系统信息管理系统的开发旨在解决这些问题,通过整合线上交易平台与后台管理功能,实现车辆信息透明化、交易流程标准化以及用户管理高效化。该系统能够为买卖双方提供便捷的交易渠道,同时为管理员提供全面的数据管理支持,从而提升二手车市场的整体运营效率。关键词:二手车交易、信息管理系统、SpringBoot、Vue、MySQL。 该系统基于SpringBoot后端框架和Vue前端框架开发,结合MySQL数据库实现数据的高效存储与管理。后端采用SpringBoot的模块化设计,集成Spring Security实现用户权限控制,并通过RESTful API与前端交互。前端使用Vue.js构建响应式用户界面,结合Element UI组件库提升用户体验。系统功能涵盖用户注册与登录、车辆信息发布与管理、交易订单处理、数据统计分析等模块,支持多角色(买家、卖家、管理员)协同操作。数据库设计遵循规范

前端Canvas:让你的网站更具视觉冲击力

前端Canvas:让你的网站更具视觉冲击力 毒舌时刻 前端Canvas?这不是游戏开发才用的吗? "Canvas性能差,我不用"——结果错过了丰富的视觉效果, "Canvas太复杂了,我学不会"——结果只能用静态图片, "我用CSS就够了,要Canvas干嘛"——结果无法实现复杂的动画效果。 醒醒吧,Canvas不是游戏开发的专利,前端也可以用它来创建丰富的视觉效果! 为什么你需要这个? * 丰富的视觉效果:创建动态图形、动画和游戏 * 高性能:直接操作像素,性能优异 * 交互性:支持鼠标、触摸等交互 * 数据可视化:绘制图表、仪表盘等 * 跨平台:在所有现代浏览器中运行 反面教材 // 反面教材:简单的Canvas绘制 function drawCircle() { const canvas = document.getElementById('canvas'