【qiankun】微前端在项目中的具体使用

这篇具有很好参考价值的文章主要介绍了【qiankun】微前端在项目中的具体使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、安装qiankun

npm install qiankun --save

2、主应用中注册和配置qiankun

  1. 在主应用的入口文件main.ts中,引入qiankun的注册方法:
import { registerMicroApps, start } from 'qiankun';
  1. 创建一个数组,用于配置子应用的相关信息。每个子应用都需要提供一个名称、入口URL、挂载点和一些可选配置项。例如:
const apiEnv = {
  dev: 'http://localhost:8081/',    // 此处不能使用network,必须用local,不然会报错跨域
  test: 'http://10.11.12.13/api/',
  production: 'http://10.11.12.13/api/'
}

const apps = [
  {
    name: '子应用1',
    entry: process.env.NODE_ENV === 'development' ? apiEnv.dev : '...根据环境去判断用哪个地址,具体不写了', // 子应用的入口URL
    container: '#subcontainer', // 子应用的挂载点
    activeRule: '/sub-app1', // 子应用的激活规则,就是子应用的公共路径,设置在createHistory里面的那个
  },
  {
    name: '子应用2',
    entry: 'http://localhost:8082',
    container: '#subcontainer',
    activeRule: '/sub-app2',
  },
  // 其他子应用的配置
];
  1. 调用 registerMicroApps 方法,注册子应用:
registerMicroApps(apps, {
	// qiankun 生命周期钩子 - 微应用加载前
	beforeLoad: (app) => {
		console.log('before load', app.name);
		return Promise.resolve();
	},
	// qiankun 生命周期钩子 - 微应用挂载后
	afterMount: (app) => {
		console.log('after mount', app.name);
		return Promise.resolve();
	}
});
  1. 调用 start 方法,启动qiankun微前端应用:
start({
	sandbox: {
		experimentalStyleIsolation: false
	}
});
  1. 在主应用的根文件里面,要放一个子应用的容器
<template>
  <div id="app">
    <Header />
    <div id="container">
      <Menu v-if="breadCrumbList.length" />
      <main :id="isSub.length ? 'main' : 'included'">
        <BreadCrumb v-if="breadCrumbList.length"/>
        <router-view :key="$route.path" ></router-view>
        <section id="commonContainer" v-if="!breadCrumbList.length"></section>
      </main>      
    </div>
  </div>
</template>

<script>
import Menu from "./layout/Menu.vue";
import Header from "./layout/Header.vue";
import BreadCrumb from "./layout/BreadCrumb";
export default {
  name: "App",
  components: {
    Menu,
    Header,
    BreadCrumb,
  },
  computed: {
    isSub() {
   	 // vue2写法写起来比较方便,就这样先举例了
      return this.$route.matched;
    },
  },
};
</script>

3、子应用中配置qiankun

  1. 安装qiankun
  2. 在main.ts中配置
// Element-plus
import ElementPlus from "element-plus";
import "element-plus/dist/index.css";
// Element Plus 组件 默认 使用英语
import zhCn from 'element-plus/es/locale/lang/zh-cn'
// Element-plus图标引入
import * as ElementPlusIconsVue from '@element-plus/icons-vue'
// Echarts依赖引入
import * as echarts from 'echarts'
// 引入d3
import * as d3 from 'd3';
// 阿里字体
import "./assets/font/iconfont.css";
import './public-path';
import { createApp } from 'vue';
import { createRouter, createWebHistory } from 'vue-router';
import App from './App.vue';
import routes from './router';
import store from './store';
import { getLocationParams } from "@/utils/common.js"

// @ts-ignore
let router = null;
let instance = null;
let history = null;

// @ts-ignore
function render(props = {}) {
  // @ts-ignore
  const { container } = props;
  // @ts-ignore
  history = createWebHistory(window.__POWERED_BY_QIANKUN__ ? '/mainapp/subapp' : '/subapp');
 // history = createWebHistory();
  router = createRouter({
    history,
    // @ts-ignore
    routes,
  });
  // 由于登录页面是用的统一页面,所有登录逻辑放在了导航守卫里面
  router.beforeEach(async(to, from, next) => {
    const token = localStorage.getItem('token')
    if (token) {
    }else {
      if (getLocationParams("id_token")) {
        localStorage.setItem("token", getLocationParams("id_token"));
        await store.dispatch('getUserInfo')
        next()
      }else {
        store.dispatch('login')
      }
    }
    next()
  })
  instance = createApp(App);
  instance.use(router).use(store).use(ElementPlus, {locale: zhCn,});
  instance.mount(container ? container.querySelector('#apm') : '#apm');
  // 全局引入element-plus图标库
  for (const [key, component] of Object.entries(ElementPlusIconsVue){
    instance.component(key, component)
  }  
}
// 独立运行时:项目不在乾坤中调用则独立运行
// @ts-ignore
if (!window.__POWERED_BY_QIANKUN__) {
  render();
}
function storeTest(props) {
  props.onGlobalStateChange &&
    props.onGlobalStateChange(
      (value, prev) => console.log(`[onGlobalStateChange - ${props.name}]:`, value, prev),
      true,
    );
  props.setGlobalState &&
    props.setGlobalState({
      ignore: props.name,
      user: {
        name: props.name,
      },
    });
}
/**
 * bootstrap 只会在微应用初始化的时候调用一次,下次微应用重新进入时会直接调用 mount 钩子,不会再重复触发 bootstrap。
 * 通常我们可以在这里做一些全局变量的初始化,比如不会在 unmount 阶段被销毁的应用级别的缓存等。
 */
// @ts-ignore
export async function bootstrap() {
  console.log('%c%s', 'color: green;', 'vue3.0 app bootstraped');
}
// 应用每次进入都会调用 mount 方法,通常我们在这里触发应用的渲染方法
export async function mount(props) {
  console.log('%c%s', 'color: green;',"子应用挂载")
  storeTest(props);
  render(props);
  instance.config.globalProperties.$onGlobalStateChange = props.onGlobalStateChange;
  instance.config.globalProperties.$setGlobalState = props.setGlobalState;
}
// 应用每次 切出/卸载 会调用的方法,通常在这里我们会卸载微应用的应用实例
export async function unmount() {
  console.log('%c%s', 'color: red;',"子应用卸载")
  instance.unmount();
  instance._container.innerHTML = '';
  instance = null;
  // 销毁路由,不然下次进入子应用时,不显示首页,而是展示上次定位的路由页面
  router = null;
  history.destroy();		
}
  1. src下新建public-path.ts
// 为了静态资源的引入
if (window.__POWERED_BY_QIANKUN__) {
__webpack_public_path__ = window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__;
}

qiankun的用处:文章来源地址https://www.toymoban.com/news/detail-659442.html

  • 微前端架构:可以将多个独立的应用程序合成一个整体,实现多个团队并行开发、独立部署和运行,提高开发效率和灵活性。
  • 独立运行:每个独立的前端应用程序都可以在自己开发环境中进行开发和测试,然后独立部署和运行,这样可以避免应用之间的相互影响和冲突,提高可靠性和稳定性。
  • 共享资源:qiankun提供了资源共享的机制,可以将公共的依赖库和资源进行统一管理,避免重复加载和浪费。这样可以减少页面加载时间和资源占用,提高性能和用户体验。
  • 动态加载:qiankun支持动态加载子应用,可以根据需要进行按需加载和卸载。这样可以减少初始加载时间和资源占用,提高页面响应速度。
  • 跨框架支持:qiankun不仅支持Vue.js,还支持其他主流的前端框架,例如React和Angular。这样可以实现不同框架之间的协同工作,提高开发团队的灵活性和选择性

到了这里,关于【qiankun】微前端在项目中的具体使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Vue3.2 + TypeScript + Pinia + Vite4 + Element-Plus + 微前端(qiankun) 后台管理系统模板(已开源---显示项目页面截图)

    Vue3.2 + TypeScript + Pinia + Vite4 + Element-Plus + 微前端(qiankun) 后台管理系统模板(已开源---显示项目页面截图)

    Wocwin-Admin,是基于 Vue3.2、TypeScript、Vite、Pinia、Element-Plus、Qiankun(微前端) 开源的一套后台管理模板;同时集成了微前端 qiankun也可以当做一个子应用。项目中组件页面使用了Element-plus 二次封装 t-ui-plus 组件,目前已新增fastmock接口。 Link:https://wocwin.github.io/wocwin-admin/ 账号:

    2024年02月08日
    浏览(17)
  • 微前端使用qiankun实现,react主应用同时兼顾react,vue3,umi子应用

    微前端使用qiankun实现,react主应用同时兼顾react,vue3,umi子应用

    理解 :我们可以简单理解为微前端是将一个项目拆分成多个模块,每个微前端模块可以由不同的团队进行管理,并可以自主选择框架,并且有自己的仓库,可以独立部署上线 应用场景 :1.当公司代码较老需要使用新的技术栈时我们可以使用微前端。2.多个团队同时开发时,每

    2024年02月09日
    浏览(9)
  • 项目搭建使用qiankun(乾坤),入门篇,以及遇到的坑与解决

    微前端架构具备以下几个核心价值: 技术栈无关 主框架不限制接入应用的技术栈,微应用具备完全自主权 独立开发、独立部署 微应用仓库独立,前后端可独立开发,部署完成后主框架自动完成同步更新 增量升级 在面对各种复杂场景时,我们通常很难对一个已经存在的系统

    2024年02月12日
    浏览(9)
  • 无障碍工具条在前端项目中的使用

    无障碍工具条在前端项目中的使用

    一、使用的工具 https://gitee.com/tywAmblyopia/ToolsUI 二、使用 VUE中使用 -1.拉取代码 -2.将 canyou 文件夹放到 public 目录下 -3.在 public 文件夹下的 index.html 文件中 /head标签前,引用v1.8以上的jquery.min.js(原网站已引用v1.8以上的jquery跳过此步骤)。 -4.在 public 文件夹下的 index.html 文件中 /he

    2024年02月14日
    浏览(6)
  • 微前端——qiankun(乾坤)实例

    微前端——qiankun(乾坤)实例

    微前端就是将不同的功能按照不同的未读拆分成多个子应用,通过主应用来加载这些子应用,微前端的核心在于拆,拆完后再合 不同团队间开发一个应用技术栈不同 希望每个团队都可以独立开发,独立部署 项目中还需要老的应用代码 我们可以将一个应用划分成若干哥子应用

    2024年02月06日
    浏览(6)
  • 微前端框架qiankun剖析

    要了解qiankun的实现机制,那我们不得不从其底层依赖的single-spa说起。随着微前端的发展,我们看到在这个领域之中出现了各式各样的工具包和框架来帮助我们方便快捷的实现自己的微前端应用。在发展早期,single-spa可以说是独树一帜,为我们提供了一种简便的微前端路由工

    2024年02月05日
    浏览(8)
  • 微前端----qiankun

    1.qiankun是什么?它解决了哪些问题? qiankun 是一个基于 single-spa 的微前端实现库,换句话说就是对single-spa进行了封装得到qiankun。 qiankun就是将一个大应用拆分成好多小项目,qiankun解决了我们协同开发的一些问题,其次更方便于我们进行更新代码 。 2.qiankun的实现原理及过程

    2024年02月12日
    浏览(8)
  • 微前端--qiankun原理概述

    微前端--qiankun原理概述

    demo放最后了。。。 一》微前端概述         微前端概念是从微服务概念扩展而来的,摒弃大型单体方式,将前端整体分解为小而简单的块,这些块可以独立开发、测试和部署,同时仍然聚合为一个产品出现在客户面前。可以理解微前端是一种将多个可独立交付的小型前端

    2023年04月14日
    浏览(11)
  • 【微前端】qiankun

    专栏: 【微前端】什么是微前端 【微前端】qiankun 【微前端】qiankun + vite + vue3 qiankun 是一种前端微服务架构,旨在解决大型复杂应用的拆分和管理问题。 qiankun 的设计思路是基于“微服务”架构和“大前端”思想的,通过拆分前端应用、动态加载、状态共享、兼容性和稳定性

    2024年02月10日
    浏览(6)
  • 微前端框架篇一,了解qiankun

    微前端框架篇一,了解qiankun

    微前端是一种将复杂单体应用拆分为多个小型独立前端应用,然后将这些小应用按需加载并集成到主应用的技术方案。 每个子应用都有自己的 JavaScript 和 CSS 代码。 单页Web应用(single page web application,SPA),就是只有一张Web页面的应用。所有页面都来回在这张页面上切换。

    2024年01月22日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包