微前端-qiankun:nuxt2 接入 nuxt2

简介: 微前端-qiankun:nuxt2 接入 nuxt2

一、背景

主应用:nuxt2、webpack

子应用:nuxt2、webpack

二、代码-配置主应用

2.1、安装

yarn add qiankun

2.2、/plugins/qiankun.js

export default async ({ store }) => {
    await store.dispatch('getMenus')
}

2.3、nuxt.config.js

export default {
  // Disable server-side rendering: https://go.nuxtjs.dev/ssr-mode
  ssr: false,
  // Global page headers: https://go.nuxtjs.dev/config-head
  head: {
    title: 'qiankun-base-main-nuxt2',
    htmlAttrs: {
      lang: 'en'
    },
    meta: [
      { charset: 'utf-8' },
      { name: 'viewport', content: 'width=device-width, initial-scale=1' },
      { hid: 'description', name: 'description', content: '' },
      { name: 'format-detection', content: 'telephone=no' }
    ],
    link: [
      { rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' }
    ]
  },
  // Global CSS: https://go.nuxtjs.dev/config-css
  css: [
    'element-ui/lib/theme-chalk/index.css'
  ],
  // Plugins to run before rendering page: https://go.nuxtjs.dev/config-plugins
  plugins: [
    '@/plugins/element-ui',
    { src: '~/plugins/qiankun.js', ssr: false },
  ],
  // Auto import components: https://go.nuxtjs.dev/config-components
  components: true,
  // Modules for dev and build (recommended): https://go.nuxtjs.dev/config-modules
  buildModules: [
    // https://go.nuxtjs.dev/eslint
    '@nuxtjs/eslint-module'
  ],
  // Modules: https://go.nuxtjs.dev/config-modules
  modules: [
    // https://go.nuxtjs.dev/axios
    '@nuxtjs/axios'
  ],
  // Axios module configuration: https://go.nuxtjs.dev/config-axios
  axios: {
    // Workaround to avoid enforcing hard-coded localhost:3000: https://github.com/nuxt-community/axios-module/issues/308
    baseURL: '/'
  },
  // Build Configuration: https://go.nuxtjs.dev/config-build
  build: {
    transpile: [/^element-ui/]
  }
}

2.4、layouts/default.vue

<template>
  <div id="app-wrapper">
    <div id="content-wrapper" class="mui--text-center">
      <div>default</div>
      <div v-if="qiankunStarted" id="subapp"></div>
      <nuxt v-if="!qiankunStarted" />
    </div>
  </div>
</template>
<script>
import { mapState } from 'vuex'
import { registerMicroApps, start } from 'qiankun'
export default {
  data () {
    return {
      qiankunStarted: null
    }
  },
  computed: {
    ...mapState({
      apps: state => state.apps || [],
      sdk: state => state.sdk || null
    })
  },
  mounted () {
    this.init()
    this.qiankunStarted = window.qiankunStarted
  },
  methods: {
    init () {
      registerMicroApps(this.apps)
      if (!window.qiankunStarted) {
        window.qiankunStarted = true
        start()
      }
    }
  }
}
</script>
<style>
</style>

2.5、store/index.js

import { Message } from 'element-ui'
import {
  initGlobalState
} from 'qiankun'
const TYPES = {
  INIT_APPS: 'init_apps'
}
export const state = () => ({
  apps: [],
  name: 'main',
  sdk: null
})
export const mutations = {
  [TYPES.INIT_APPS] (state, apps){
    // 初始化全局变量
    const actions = initGlobalState({
      name: state.name
    })
    // 使用 sdk 方式进行 父子应用通信, 这里大家可以根据自己项目进行增加删除
    const sdk = {
      globalState: actions,
      toast: (...args) => {
        Message(...args)
      },
      router: {
        push: (...args) => {
          this.$router.push(...args)
        },
        replace: (...args) => {
          this.$router.replace(...args)
        },
        resolve: (...args) => {
          this.$router.resolve(...args)
        }
      },
      store: {
        dispatch: (...args) => {
          this.dispatch(...args)
        },
        commit: (...args) => {
          this.commit(...args)
        },
        state: { ...this.state }
      },
      name: state.name
    }
    // 处理 apps 列表
    apps = apps.map((item) => {
      return {
        ...item,
        container: '#subapp',
        props: {
          sdk
        }
      }
    })
    // 处理路由表
    const routes = []
    apps.forEach((item, i) => {
      if (Array.isArray(item.activeRule)) {
        routes.push(...item.activeRule.map(i => ({
          path: `${i.slice(1)}`,
          name: `${item.name}${i}`,
          component: () => import('@/pages/spa.vue').then(m => m.default || m)
        })))
        return false
      }
      routes.push({
        path: `${item.activeRule.slice(1)}`,
        name: `${item.name}-i`,
        component: () => import('@/pages/spa.vue').then(m => m.default || m)
      })
    })
    // 动态增加路由, 这里要注意 404 页面不能直接写在 pages 中
    // 不然匹配的时候会根据顺序匹配到 * 就直接返回了 从而匹配不到我们后续添加的动态路由
    // console.log(routes)
    this.$router.addRoutes([].concat(...routes,
      {
        path: '404',
        name: 404,
        component: () => import('~/layouts/error.vue').then(m => m.default || m)
      }
    ))
    state.apps = apps
    state.sdk = sdk
  }
}
export const actions = {
  async getMenus ({ commit }) {
    const { payload } = await getMenus()
    commit(TYPES.INIT_APPS, payload)
  }
}
function getMenus () {
  return {
    code: 200,
    payload: [
      {
        name: 'subapp',
        container: '#subapp',
        activeRule: '/about',
        entry: '//localhost:3005', // 解决不同服务器和域名
        props: {
          msg: '我是主应用main' // 主应用向微应用传递参数
        }
      }
    ],
    message: 'success'
  }
}

三、接入子应用

微前端-qiankun:vue3-vite 接入 nuxt2_snow@li的博客-CSDN博客

四、访问qiankun主应用,访问成功

五、欢迎交流指正,关注我,一起学习。

相关文章
|
前端开发 JavaScript
乾坤qiankun(微前端)样式隔离解决方案--使用插件替换前缀
乾坤qiankun(微前端)样式隔离解决方案--使用插件替换前缀
2516 8
|
前端开发 JavaScript 开发者
qiankun(乾坤)微前端框架简介
qiankun(乾坤)微前端框架简介
3208 1
|
前端开发 JavaScript
轻松上手:基于single-spa构建qiankun微前端项目完整教程
轻松上手:基于single-spa构建qiankun微前端项目完整教程
647 0
|
前端开发 JavaScript 容器
第九章(应用场景篇)Qiankun微前端深度解析与实践教程
第九章(应用场景篇)Qiankun微前端深度解析与实践教程
965 0
|
资源调度 前端开发 JavaScript
手把手带你实现简单的微前端qiankun搭建
手把手带你实现简单的微前端qiankun搭建
578 0
|
前端开发 JavaScript
微前端使用qiankun实现,react主应用同时兼顾react,vue3,umi子应用
微前端使用qiankun实现,react主应用同时兼顾react,vue3,umi子应用
1704 0
|
前端开发 JavaScript 容器
微前端----qiankun
qiankun 是一个基于 single-spa 的微前端实现库,换句话说就是对single-spa进行了封装得到qiankun。 qiankun就是将一个大应用拆分成好多小项目,qiankun解决了我们协同开发的一些问题,其次更方便于我们进行更新代码 。
1231 0
|
前端开发
微前端-qiankun:vue3-vite 接入 vue3-vite
微前端-qiankun:vue3-vite 接入 vue3-vite
1159 0
|
前端开发
微前端-qiankun:vue3-vite 接入 vue3-webpack
微前端-qiankun:vue3-vite 接入 vue3-webpack
782 0
|
存储 人工智能 前端开发
前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
1192 14

热门文章

最新文章

  • 1
    前端如何存储数据:Cookie、LocalStorage 与 SessionStorage 全面解析
    713
  • 2
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
    308
  • 3
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
    263
  • 4
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
    216
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
    318
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
    456
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
    201
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
    147
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
    214
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
    290