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. 开发环境一定要先启动子服务器,再启动主服务,否则会提示找不到应用,而且刷新无效,具体原因还在甄别中。
相关推荐
知识分享小能手2 分钟前
微信小程序入门学习教程,从入门到精通,微信小程序页面交互 —— 知识点详解与案例实现(3)
前端·javascript·学习·react.js·微信小程序·小程序·交互
石小石Orz7 分钟前
思考许久,我还是提交了离职申请
前端
m0_616188499 分钟前
CSS中的伪类和伪元素
前端·javascript·css
一个小潘桃鸭10 分钟前
组件抽离:el-upload支持图片粘贴上传并添加预览
前端
快乐就好ya18 分钟前
React基础到进阶
前端·javascript·react.js
小龙在山东24 分钟前
VS Code 使用 Chrome DevTools MCP 实现浏览器自动化
前端·自动化·chrome devtools
悠哉摸鱼大王25 分钟前
多模态场景下tts功能实现
前端·javascript
东华帝君28 分钟前
__proto__对比prototype
前端
夜晓码农32 分钟前
VSCode Web版本安装
前端·ide·vscode
初出茅庐的1 小时前
hooks&&状态管理&&业务管理
前端·javascript·vue.js