微前端框架的实战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 的官方示例入手,逐步深入定制化需求。

相关推荐
阿丽塔~2 小时前
react中 useEffect和useLayoutEffect的区别
前端·react.js·前端框架
2401_882726488 小时前
PLC物联网网关是什么?PLC网关应用场景
前端·物联网·低代码·前端框架·web
Din8 小时前
手把手实现网站RTL布局:从PostCSS插件到Bidi算法原理与避坑指南
前端·javascript·前端框架
咔咔库奇9 小时前
【react】实现路由返回拦截的多种方式
前端·react.js·前端框架
还是鼠鼠10 小时前
Node.js 模块加载机制--详解
java·开发语言·前端·vscode·前端框架·npm·node.js
前端菜鸟日常19 小时前
EJS缓存解决多页面相同闪动问题
前端框架·node.js
神经星星1 天前
【TVM教程】使用 TVMC Micro 执行微模型
人工智能·机器学习·前端框架
Thomas游戏开发1 天前
Unity3D光照层级与动态切换指南
前端框架·unity3d·游戏开发
呵呵哒( ̄▽ ̄)"1 天前
React - LineChart组件编写(用于查看每日流水图表)
前端·react.js·前端框架