qiankun集成react18+vite
大约 9 分钟
qiankun 集成 react18+vite
使用 qiankun 集成 react18+vite 项目
基座项目
基座项目可见qiankun 示例
子应用改造
vite 本身不支持 qiankun,需要安装 vite-plugin-qiankun
pnpm install vite-plugin-qiankun配置环境变量
配置环境变量,是子应用既可以单独运行又可以接入主应用
.env
NODE_ENV=development
VITE_APP_BASE_URL=/.env.micro
NODE_ENV=development
VITE_APP_BASE_URL=/app4.env.buildMicro
NODE_ENV=development
VITE_APP_BASE_URL=/app4然后在 package.json 中配置启动脚本
{
  "scripts": {
    "dev": "vite",
    "dev:micro": "vite --mode micro",
    "build": "tsc -b && vite build --mode micro",
    "preview": "vite preview"
  },
}入口文件改造
使用插件中的 renderWithQiankun 配置生命周期
import React from 'react';
import ReactDOM from 'react-dom/client';
import {
  renderWithQiankun,
  qiankunWindow,
} from 'vite-plugin-qiankun/dist/helper';
import type { QiankunProps } from 'vite-plugin-qiankun/dist/helper';
import App from './App.tsx';
import './index.css';
let root: any = null;
const render = (props: QiankunProps) => {
  const { container } = props;
  root = ReactDOM.createRoot(
    container
      ? container.querySelector('#root')!
      : document.getElementById('root')!
  ).render(
    <React.StrictMode>
      <App />
    </React.StrictMode>
  );
};
renderWithQiankun({
  mount(props: QiankunProps) {
    render(props);
  },
  bootstrap() {},
  unmount() {},
  update() {},
});
if (!qiankunWindow.__POWERED_BY_QIANKUN__) {
  render({});
}路由改造
修改路由的 basename 为之前配置的环境变量
import React from 'react';
import { createBrowserRouter } from 'react-router-dom';
import Root from '../views/root';
import NextPage from '../views/next';
const router = createBrowserRouter(
  [
    // ...
  ],
  {
    basename: import.meta.env.VITE_APP_BASE_URL,
  }
);
export default router;修改打包配置
除了导出的生命周期,还要在打包配置中修改
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import qiankun from 'vite-plugin-qiankun';
const { name } = require('./package');
// https://vitejs.dev/config/
export default defineConfig(({ mode }) => {
  return {
    base: mode === 'development' ? './' : '/app4',
    plugins: [react(), qiankun(name, { useDevMode: true })],
    server: {
      port: 8084,
    },
  };
});注册子应用
子应用配置完成后,到基座应用中去注册
const apps: RegistrableApp<any>[] = [
  // ...
  {
    name: 'app4',
    entry: 'http://localhost:8084/app4',
    container: '#microApp',
    activeRule: '/app4',
  },
];
registerMicroApps(apps);
start();出现报错
此时会出现报错,详见qiankun 嵌入 react 项目报错
子应用增加功能
在子应用中添加随意内容,并测试嵌入后是否正常显示
