当前位置: 首页 > news >正文

qiankun微前端vue3+ts+vite(配置示例)

// 主应用

main.ts

// 注册子应用
registerMicroApps([
  {
    name: 'sub_ANALYTICS_APM_SEARCH',
    entry: 'http://localhost:7101/', // 子应用地址
    container: '#sub-container', // 子应用挂载容器
    activeRule: '/controller/#/location=ANALYTICS_APM_SEARCH', // 路由匹配规则
    props: {
      msg: '我是来自主应用的值-vue' // 主应用向微应用传递参数
    },
  }
])

// 启动 qiankun
start()

// router结构

  {
    path: '/controller',
    component: Controller,
    name: 'Contoller',
    children: [
           {
            path: 'ANALYTICS_APM_SEARCH',
            name: 'sub_ANALYTICS_APM_SEARCH',
            component: () => import('@/app/view/Analyse/APMSearch/index.vue'),
            alias: '/location=ANALYTICS_APM_SEARCH',
            props: (route) => ({
              timeRange: route.query.timeRange,
            }),
          },
     ]
  }

//@/app/view/Analyse/APMSearch/index.vue 文件

<template>
    <div id="sub-container"></div>
</template>

子应用

// vite.config.ts

// 子应用的vite.config.ts
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import qiankun from 'vite-plugin-qiankun';
import path from 'path';



export default defineConfig({
  plugins: [
    vue(),
    qiankun('sub_ANALYTICS_APM_SEARCH', {
      useDevMode: true,  // 使用开发模式
    }),
  ],
  base: '/location=ANALYTICS_APM_SEARCH',  // 子应用的基础路径
  server: {
    port: 7101,  // 子应用的端口
    cors: true,  // 开启跨域
    headers: {
      'Access-Control-Allow-Origin': '*',
    },
  },
  resolve: {
    alias: {
      '@': path.resolve(__dirname, 'src'),
    },
  },
  build: {
    rollupOptions: {
      output: {
        format: 'umd',  // 构建为umd格式
        name: 'sub_ANALYTICS_APM_SEARCH',  // 设置全局变量名称
      },
    },
  },
});

// main.ts

// 子应用的main.ts
import { createApp } from 'vue';
import App from './App.vue';
import './style.css'
import { renderWithQiankun, qiankunWindow } from "vite-plugin-qiankun/dist/helper"
import router from './router/index';


let app: any;

if (!qiankunWindow.__POWERED_BY_QIANKUN__) {
  createApp(App).use(router).mount("#sub-container");
} else {
  renderWithQiankun({
    mount(props:any) {
      // 传递的值可以获取到了
      app = createApp(App)
      
      app.use(router)
      app.mount(
        props.container
          ? props.container.querySelector("#sub-container")
          : document.getElementById("sub-container")
      );
    },
    bootstrap() {
      console.log("--bootstrap");
    },
    update(props:any) {
      console.log("--update", props);
    },
    unmount() {
      console.log("--unmount");
      app?.unmount();
    },
  });
}

// router

// src/router/index.ts
import { createRouter, createWebHashHistory } from 'vue-router'

const routes = [
  {
    path: '/',
    name: 'Home',
    component: () => import('../views/Home.vue')
  }
]

const router = createRouter({
  history: createWebHashHistory('/controller'), // ✅ 使用 hash 路由
  routes
})


router.beforeEach((to, from, next) => {
  console.log('导航到:', to.fullPath)
  next()
})
export default router

访问路径

http://localhost:8080/controller/#/location=ANALYTICS_APM_SEARCH?timeRange=last_1_hour.BEFORE_NOW.-1.-1.60

http://www.dtcms.com/a/123427.html

相关文章:

  • 【图书管理系统】深入解析基于 MyBatis 数据持久化操作:全栈开发图书管理系统:查询图书属性接口(注解实现)、修改图书属性接口(XML 实现)
  • 【安全】加密算法原理与实战
  • 人工智能第一章 探索人工智能基石:从智能定义到模式识别的全面解析
  • MySQL--基础知识点--81.3--TRIGGER
  • 2025.4.10总结
  • 1200 模拟量输入输出功能
  • 图像生成模型的不可检测水印——Undetectable Watermark for Generative Image Models
  • 【hadoop】Hive数据仓库安装部署
  • oracle 并行度(Parallel Degree)
  • ZYNQ笔记(二):MIO 、EMIO
  • PyTorch复现多维逻辑回归
  • AI与5G的融合:如何实现更快速、更智能的物联网应用?
  • 在docker里装rocketmq-console
  • edis 主从复制
  • 在 Dev-C++中编译运行GUI 程序介绍(二)示例:祝福程序
  • Python常用排序算法
  • dataset 的max_length=256是什么意思; DataLoader:shuffle=True 是什么意思
  • [LevelDB]Block系统内幕解析-元数据块(Meta Block)元数据索引块(MetaIndex Block)索引块(Index Block)
  • XHR、FetchAxios详解网络相关大片文件上传下载
  • P1331 洛谷 海战
  • uni-app 开发安卓app提交审核时因 隐私协议被拒时
  • 数据结构与算法-动态规划-区间dp,状态机dp,树形dp
  • 虚拟内存详解
  • MyBatisX插件使用
  • PointNet++语义分割(semseg)训练自己的数据集并完成可视化并保存txt结果
  • HDCP(一)
  • QML自定义属性和方法
  • 深入解析栈回溯技术:如何通过异常处理精准定位程序崩溃点
  • threeJs实现裸眼3D小狗
  • 每天记录一道Java面试题---day38