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

### 技术栈集成与使用 在现代前端开发中,Vue3.0、TypeScript、Vite6、ant-design-vue4、pinia、echarts、unocss、vxe-table 和 qiankun 的组合是一种非常流行的技术栈。以下是对这些技术的集成和使用的详细介绍。 #### 1. Vue3.0 Vue3.0 是一个渐进式 JavaScript 框架,提供了 Composition API 等新特性,增强了代码的可维护性和复用性[^1]。可以通过 `npm install vue@next` 安装 Vue3.0,并结合 TypeScript 使用以获得类型检查功能。 #### 2. TypeScript TypeScript 是一种静态类型的超集语言,能够显著提高代码质量并减少运行时错误[^1]。通过配置 `tsconfig.json` 文件,可以确保项目遵循严格的类型规则。 #### 3. Vite6 Vite 是一个基于 ESBuild 的快速构建工具,极大地提升了开发体验。安装命令为 `npm install vite@latest`,它支持热更新和原生 ESM 模块加载。 #### 4. ant-design-vue4 ant-design-vue 是 Ant Design 的 Vue 实现,提供了一套高质量的 UI 组件库。可以通过 `npm install ant-design-vue@next` 安装,并将其注册到 Vue 应用中。 ```javascript import { createApp } from &#39;vue&#39;; import Antd from &#39;ant-design-vue&#39;; import &#39;ant-design-vue/dist/antd.css&#39;; const app = createApp(App); app.use(Antd); app.mount(&#39;#app&#39;); ``` #### 5. Pinia Pinia 是 Vue3 的状态管理库,相比 Vuex 更加简洁和直观。可以通过 `npm install pinia` 安装,并在项目中初始化。 ```javascript import { createPinia } from &#39;pinia&#39;; import { createApp } from &#39;vue&#39;; const app = createApp(App); const pinia = createPinia(); app.use(pinia); ``` #### 6. ECharts ECharts 是一个强大的图表库,支持丰富的可视化效果。可以通过 `npm install echarts` 安装,并在组件中引入。 ```javascript import * as echarts from &#39;echarts&#39;; const chart = echarts.init(document.getElementById(&#39;main&#39;)); chart.setOption({ title: { text: &#39;示例图表&#39; }, tooltip: {}, xAxis: { data: [&#39;A&#39;, &#39;B&#39;, &#39;C&#39;] }, yAxis: {}, series: [{ name: &#39;销量&#39;, type: &#39;bar&#39;, data: [5, 20, 36] }] }); ``` #### 7. UnoCSS UnoCSS 是一个原子化 CSS 框架,能够按需生成样式[^1]。通过 `npm install unocss` 安装,并配置其规则文件。 #### 8. vxe-table vxe-table 是一个功能强大的表格组件库,支持复杂的数据展示需求[^1]。可以通过 `npm install vxe-table` 安装,并在项目中使用。 ```javascript import { VXETable } from &#39;vxe-table&#39;; import &#39;vxe-table/lib/style.css&#39;; const app = createApp(App); app.use(VXETable); ``` #### 9. Qiankun Qiankun 是一个微前端框架,允许多个子应用独立开发和部署[^1]。可以通过 `npm install qiankun` 安装,并配置主应用和子应用的通信逻辑。 #### 10. ES6 特性 ES6 提供了许多现代化的语法特性,如箭头函数、模块化、解构赋值等。确保项目中的 Babel 或 TypeScript 配置支持这些特性。 --- ### 示例代码:项目初始化脚本 以下是一个简单的项目初始化脚本,展示了如何集成上述技术栈: ```bash # 初始化项目 npm init vite@latest my-project --template vue-ts cd my-project # 安装依赖 npm install ant-design-vue@next pinia echarts unocss vxe-table qiankun # 配置 TypeScript npx tsc --init ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值