Skip to content

Qiankun 微前端模板

基于 qiankun + Vue 3 + TypeScript + Vite 的现代化微前端开发模板,开箱即用,让你快速构建微前端应用。

技术栈

  • Qiankun - 生产级的微前端解决方案
  • Vue 3 - 渐进式 JavaScript 框架
  • TypeScript - JavaScript 的超集,提供类型安全
  • Vite - 下一代前端构建工具
  • Vue Router - Vue.js 官方路由管理器
  • Pinia - Vue 3 官方状态管理库
  • Vue i18n - Vue.js 国际化插件
  • Tailwind CSS - 实用优先的 CSS 框架
  • SCSS - CSS 预处理器,增强样式编写能力

快速开始

创建项目

bash
# 初始化项目
vup init my-project

# 进入项目目录
cd my-project

# 添加 Qiankun 主应用
vup add my-main-app

开发

bash
# 安装依赖
pnpm install

# 启动主应用
cd apps/my-main-app
pnpm dev

主应用将在 http://localhost:9307 启动

启动子应用

bash
# 在另一个终端启动子应用(使用 vue-template)
cd apps/vue-template
pnpm dev

子应用将在 http://localhost:9301 运行

访问微前端

访问 http://localhost:9307/auto/vue/ 查看微前端效果

项目结构

apps/my-main-app/
├── src/
│   ├── views/
│   │   ├── auto/              &自动加载示例页面
│   │   │   └── Auto.vue      # 微应用容器组件
│   │   └── manual/            # 手动加载示例页面
│   │       └── Manual.vue    # 手动加载容器组件
│   ├── router/                # 路由配置
│   ├── App.vue               # 根组件
│   └最初的 main.ts           # 入口文件
├── index.html                # HTML 模板
├── package.json              # 项目配置
└── vite.config.js            # Vite 配置builder

核心特性

微前端架构

vue
<!-- views/auto/Auto.vue -->
<template>
  <div class="micro-container">
    <div class="header">
      <h1>主应用</h1>
    </div>
    <div id="micro-app-container"></div>
  </div>
</template>

<script setup lang="ts">
import { onMounted, onUnmounted } from 'vue';
import { loadMicroApp, MicroApp } from 'qiankun';

let microApp: MicroApp | null = null;

onMounted(() => {
  microApp = loadMicroApp({
    name: 'vue-sub-app',
    entry: '//localhost:9301',
    container: '#micro-app-container',
  });
});

onUnmounted(() => {
  microApp?.unmount();
});
</script>

路由管理

主应用根据路由自动加载微应用:

typescript
// router/index.ts
import { registerMicroApps, start } from 'qiankun';

registerMicroApps([
  {
    name: 'vue-sub-app',
    entry: '//localhost:9301',
    container: '#subapp-viewport',
    activeRule: '/auto/vue',
  },
]);

start({
  sandbox: {
    experimentalStyleIsolation: true,
  },
});

全局状态管理

主应用使用 qiankun 的全局状态管理功能:

typescript
// main.ts
import { initGlobalState } from 'qiankun';

const state = { name: 'qiankun-template' };
const actions = initGlobalState(state);

// 子应用中
props.onGlobalStateChange((state, prev) => {
  console.log('状态变化:', state, prev);
});

生命周期管理

子应用需要支持 qiankun 的生命周期函数:

typescript
// 子应用生命周期
export async function bootstrap() {
  console.log('子应用启动');
}

export async function mount(props) {
  console.log('子应用挂载', props);
  // 挂载子应用
}

export async function unmount() {
  console.log('子应用卸载');
  // 清理资源
}

开发工具

Vite 配置

javascript
// vite.config.js
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import qiankun from 'vite-plugin-qiankun';

export default defineConfig({
  plugins: [vue(), qiankun('main-app', { useDevMode: true })],
  server: {
    host: '0.0.0.0',
    port: 9307,
    cors: true,
  },
});

TypeScript 配置

json
// tsconfig.json
{
  "extends": "../../tsconfig.json",
  "compilerOptions": {
    "outDir": "./.output",
    "baseUrl": ".",
    "paths": {
      "@/*": ["./src/*"],
      "@shared/*": ["../../_shared/*"]
    }
  },
  "include": ["src/**/*", "src/**/*.vue", "./auto-imports.d.ts"]
}

可用脚本

json
{
  "scripts": {
    "dev": "vite",
    "build": "tsc --noEmit && vite build",
    "lint": "eslint src/ --ext .vue,.ts,.js",
    "lint:fix": "eslint src/ --ext .vue,.ts,.js --fix",
    "format": "prettier --write \"src/**/*.{js,ts,vue,json,css,scss}\"",
    "format:check": "prettier --check \"src/**/*.{js,ts,vue,json,css,scss}\""
  }
}

最佳实践

子应用开发

  • 使用由 vite-plugin-qiankun 插件简化配置
  • 支持独立运行和微应用运行
  • 正确处理生命周期函数
  • 实现样式隔离

主应用开发

  • 合理规划微应用的路由规则
  • 实现全局状态管理
  • 处理微应用间的通信
  • 监控微应用的生命周期

部署策略

  • 主应用和子应用可以独立部署
  • 使用 CDN 加速静态资源
  • 实现版本管理和回滚机制

测试微前端

本模板使用 vue-template 作为子应用进行测试。请确保同时启动子应用:

bash
# 在项目根目录下
cd apps/vue-template
pnpm dev

子应用将在 http://localhost:9301 运行

部署

构建生产版本

bash
# 构建主应用
cd apps/my-main-app
pnpm build

# 构建子应用
cd apps/vue-template
pnpm build

部署到 Vercel

微前端应用可以部署到 Vercel。详细的部署配置和步骤请参考 Vercel 部署指南

相关资源