qiankunjs 微前端框架笔记

1 主应用接入

安装 yarn add qiankun

1.1微应用注入功能

java 复制代码
import { registerMicroApps, start as startQiankun } from 'qiankun';

const initRegisterMicroApps = () => {
  // 注册子应用
  registerMicroApps([
    {
      name: 'scm-suppler', // 子应用名称
      entry: '//localhost:3000', // 子应用入口
      container: '#microApp', // 挂载子应用的容器
      activeRule: '/message', // 激活路径
      props: {
        // 传递给子应用的参数
        mainAppProp: '来自主应用的参数',
      },
    },
  ]);
  const start = () => {
    // 启动 qiankun
    startQiankun({
      sandbox: {
        strictStyleIsolation: true, // 严格的样式隔离
        experimentalStyleIsolation: true,
      },
      // 单例模式
      singular: true,
      // 可选配置
      //  prefetch: 'all', // 预加载子应用
    });
  };
  return {
    start,
  };
};

export default initRegisterMicroApps;

1.2入口文件引入

java 复制代码
import { createApp } from 'vue';
import './style.css';
import App from './App';

import initRegisterMicroApps from './registerMicroApps';

let app: any;
const { start } = initRegisterMicroApps();
const bootstrap = () => {
  app = createApp(App).mount('#app');
};

bootstrap();

start();

2 子应用接入

vite: yarn add vite-plugin-qiankun

2.1 vite 配置

java 复制代码
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import vueJsx from '@vitejs/plugin-vue-jsx';
import qiankun from 'vite-plugin-qiankun';
// https://vite.dev/config/
export default defineConfig({
  base: '/message',
  plugins: [
    vue(),
    vueJsx({
      // JSX 插件选项
      transformOn: true,
      mergeProps: true,
    }),
    qiankun('scm-suppler', {
      useDevMode: true,  // 如果是开发环境这个很重要,不开会报错es6 的 module 不支持
    }),
  ],
  server: {
    port: 3000,
    host: '0.0.0.0',
    open: true,
    cors: true,
    headers: {
      'Access-Control-Allow-Origin': '*',
    },
  },
});

2.2 子应用入口文件

java 复制代码
import { createApp } from 'vue';
import './style.css';
import App from './App.vue';
import {
  renderWithQiankun,
  qiankunWindow,
  type QiankunProps,
} from 'vite-plugin-qiankun/dist/helper';
let app: any;
const bootstrap = (props: QiankunProps) => {
// 这一步很重要,否则会提示找不到哦 dom
  let elDom = props?.container?.querySelector?.('#app') || '#app';
  app = createApp(App).mount(elDom);
};
// some code
renderWithQiankun({
  mount(props) {
    console.log('mount');
    debugger;
    bootstrap(props);
  },
  update(props) {},
  /**
   * The bootstrap function is called when the micro app is initialized.
   * It is responsible for mounting the app to the DOM.
   *
   * @return {void} Nothing is returned.
   */
  bootstrap() {
    console.log('bootstrap');
  },

  unmount(props: any) {
    console.log('unmount');
    const { container } = props;
    app.unmount();
  },
});

if (!qiankunWindow.__POWERED_BY_QIANKUN__) {
  debugger;
  bootstrap({});
}

坑点

  1. 开发环境一定要先启动子服务器,再启动主服务,否则会提示找不到应用,而且刷新无效,具体原因还在甄别中。
相关推荐
晚霞的不甘19 分钟前
Flutter for OpenHarmony天气卡片应用:用枚举与动画打造沉浸式多城市天气浏览体验
前端·flutter·云原生·前端框架
xkxnq32 分钟前
第五阶段:Vue3核心深度深挖(第74天)(Vue3计算属性进阶)
前端·javascript·vue.js
三小河39 分钟前
Agent Skill与Rules的区别——以Cursor为例
前端·javascript·后端
Hilaku1 小时前
不要在简历上写精通 Vue3?来自面试官的真实劝退
前端·javascript·vue.js
三小河1 小时前
前端视角详解 Agent Skill
前端·javascript·后端
Aniugel1 小时前
单点登录(SSO)系统
前端
鹏多多1 小时前
移动端H5项目,还需要react-fastclick解决300ms点击延迟吗?
前端·javascript·react.js
serioyaoyao1 小时前
上万级文件一起可视化,怎么办?答案是基于 ParaView 的远程可视化
前端
万少1 小时前
端云一体 一天开发的元服务-奇趣故事匣经验分享
前端·ai编程·harmonyos
WindrunnerMax1 小时前
从零实现富文本编辑器#11-Immutable状态维护与增量渲染
前端·架构·前端框架