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

相关推荐
三月的一天1 小时前
在 React Three Fiber 中实现 3D 模型点击扩散波效果
前端·react.js·前端框架
梁辰兴2 小时前
企业培训笔记:Vue3前端框架配置
笔记·前端框架·npm·vue·vue3·node
中微子9 小时前
React Router 面试指南:从基础到实战
前端·react.js·前端框架
伍哥的传说11 小时前
React 实现五子棋人机对战小游戏
前端·javascript·react.js·前端框架·node.js·ecmascript·js
01传说12 小时前
vue3 配置安装 pnpm 报错 已解决
java·前端·vue.js·前端框架·npm·node.js
我想说一句1 天前
React待办事项开发记:Hook魔法与组件间的悄悄话
前端·javascript·前端框架
lichenyang4531 天前
React移动端开发项目优化
前端·react.js·前端框架
当牛作馬2 天前
React——ant-design组件库使用问题记录
前端·react.js·前端框架
Codebee2 天前
OneCode 组件服务通用协议栈:构建企业级低代码平台的技术基石
前端·前端框架·开源
我命由我123452 天前
Vue 开发问题:Missing required prop: “value“
开发语言·前端·javascript·vue.js·前端框架·ecmascript·js