微前端框架的实战demo

以下是基于主流微前端框架的实战 Demo 开发指南,综合多个开源项目与实践案例整理而成:


一、qiankun 框架实战

1. 核心架构
  • 主应用:负责路由分发、子应用注册与生命周期管理
  • 子应用:独立开发部署,支持不同技术栈(Vue/React/Angular)
2. 快速搭建步骤
  1. 主应用配置(Vue 示例):

    javascript 复制代码
    // main.js
    import { registerMicroApps, start } from 'qiankun';
    registerMicroApps([
      {
        name: 'vue-sub',
        entry: '//localhost:7100', // 子应用入口
        container: '#subapp-container', 
        activeRule: '/vue',
        props: { token: '主应用传递的数据' } // 父子通信参数
      }
    ]);
    start({ prefetch: 'all' });
  2. 子应用改造

    • 入口文件 需暴露生命周期钩子:

      javascript 复制代码
      export async function bootstrap() { /* 初始化 */ }
      export async function mount(props) { 
        // 挂载逻辑,props 接收主应用参数
        render(props.container || document.getElementById('app'));
      }
      export async function unmount() { /* 卸载逻辑 */ }
    • Webpack 配置

      javascript 复制代码
      // vue.config.js
      module.exports = {
        devServer: { headers: { 'Access-Control-Allow-Origin': '*' } },
        configureWebpack: { output: { library: 'vueSub', libraryTarget: 'umd' } }
      };
3. 通信机制
  • 主应用 初始化全局状态:

    javascript 复制代码
    import { initGlobalState } from 'qiankun';
    const actions = initGlobalState({ user: 'admin' });
    actions.onGlobalStateChange((state, prev) => { /* 监听变化 */ });
  • 子应用 通过 props 获取并更新状态:

    javascript 复制代码
    props.onGlobalStateChange((state) => { /* 子应用监听 */ });
    props.setGlobalState({ ...state, newData: 'value' });

二、micro-app 框架实战

1. 多技术栈集成
  • 支持框架:Angular、Next.js、Nuxt.js、React、Vue3(Vite)

  • 项目结构

    plaintext 复制代码
    micro-app-demo/
    ├── main-app/        # 主应用(React)
    ├── child-apps/
    │   ├── angular11/  # Angular 子应用
    │   └── vite-vue3/  # Vite + Vue3 子应用
2. 动态加载子应用
html 复制代码
<!-- 主应用通过 Web Component 标签加载 -->
<micro-app 
  name="vue3-app" 
  url="http://localhost:3001"
  baseroute="/vue3"
></micro-app>
3. 样式隔离
  • 默认启用 Shadow DOM 隔离 CSS
  • 通过 disableScopecss 属性关闭隔离

三、自研微前端框架进阶

1. 核心功能实现
  • 沙箱隔离 :通过 Proxy 代理 window 对象

    javascript 复制代码
    class Sandbox {
      constructor() { this.proxy = new Proxy(window, { /* 拦截操作 */ }); }
    }
  • 路由拦截 :重写 history.pushStatepopstate 事件

    javascript 复制代码
    window.history.pushState = patchedPushState;
    window.addEventListener('popstate', handleRouteChange);
2. 多子应用并行加载
javascript 复制代码
// 同时加载 React15 和 Vue2 子应用
loadApp({ name: 'react15', entry: '//localhost:9002' });
loadApp({ name: 'vue2', entry: '//localhost:9004' });
3. 性能优化
  • 预加载:提前加载子应用静态资源
  • 缓存策略:对已加载子应用保留 DOM 和 JS 上下文

四、常见问题解决方案

  1. 路由冲突

    • Hash 模式 :主应用与子应用统一使用 #/subapp/ 前缀
    • History 模式 :通过 base 参数设置子应用路由基准路径
  2. CSS 污染

    • 使用 postcss 插件添加命名空间(如 postcss-prefix-selector
    • 动态卸载子应用样式表
  3. 资源加载失败

    • 确保子应用配置 publicPath 动态注入
    javascript 复制代码
    __webpack_public_path__ = window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__;

五、完整 Demo 推荐

  1. qiankun 官方示例

  2. micro-app 多框架 Demo

  3. 阿里云实践案例


通过以上案例,开发者可快速掌握微前端核心场景的实现方法。建议从 qiankun 或 micro-app 的官方示例入手,逐步深入定制化需求。

相关推荐
晚霞的不甘7 小时前
Flutter for OpenHarmony天气卡片应用:用枚举与动画打造沉浸式多城市天气浏览体验
前端·flutter·云原生·前端框架
WindrunnerMax8 小时前
从零实现富文本编辑器#11-Immutable状态维护与增量渲染
前端·架构·前端框架
竟未曾年少轻狂8 小时前
Vue3 生命周期钩子
前端·javascript·vue.js·前端框架·生命周期
Jing_Rainbow9 小时前
【React-6/Lesson89(2025-12-27)】React Context 详解:跨层级组件通信的最佳实践📚
前端·react.js·前端框架
C澒10 小时前
多场景多角色前端架构方案:基于页面协议化与模块标准化的通用能力沉淀
前端·架构·系统架构·前端框架
光影少年2 天前
react状态管理都有哪些及优缺点和应用场景
前端·react.js·前端框架
梦帮科技2 天前
Node.js配置生成器CLI工具开发实战
前端·人工智能·windows·前端框架·node.js·json
C澒2 天前
前端整洁架构(Clean Architecture)实战解析:从理论到 Todo 项目落地
前端·架构·系统架构·前端框架
C澒2 天前
Remesh 框架详解:基于 CQRS 的前端领域驱动设计方案
前端·架构·前端框架·状态模式
C澒2 天前
前端分层架构实战:DDD 与 Clean Architecture 在大型业务系统中的落地路径与项目实践
前端·架构·系统架构·前端框架