微前端框架 qiankun 配置使用【基于 vue/react脚手架创建项目 】

qiankun官方文档:qiankun - qiankun

一、创建主应用:

这里以  vue  为主应用,vue版本:2.x

// 全局安装vue脚手架
npm install -g @vue/cli

vue create main-app

省略 vue 创建项目过程,若不会可以自行百度查阅教程

二、到  主应用(main-app)目录下,安装微前端框架依赖  qiankun:

npm i qiankun -S

三、改造主应用(main-app):

       1. 为主应用(main-app)添加路由:

vue add router

       2. 打开主应用(main-app)入口文件(main.js),修改部分代码:

        直接上这部分代码:

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import { registerMicroApps, start } from 'qiankun';

registerMicroApps([
  {
    name: 'react app', // app name registered
    entry: '//localhost:3000',
    container: '#home',
    activeRule: '/',
  },
  {
    name: 'vue app',
    entry: { scripts: ['//localhost:8888/main.js'] },
    container: '#about',
    activeRule: '/vue',
  },
]);

start();
Vue.config.productionTip = false

new Vue({
  router,
  render: h => h(App)
}).$mount('#app')

由于原来添加路由在  src/views  目录下存在两个文件:

HomeView.vue      AboutView.vue

改造这两个文件,和main.js中配置的对应:

 四、创建子应用  react:

//全局安装 create-react-app 脚手架
npm install -g create-react-app

//创建项目
create-react-app child-react

改造  src  下的  index.js

import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';

/**
 * bootstrap 只会在微应用初始化的时候调用一次,下次微应用重新进入时会直接调用 mount 钩子,不会再重复触发 bootstrap。
 * 通常我们可以在这里做一些全局变量的初始化,比如不会在 unmount 阶段被销毁的应用级别的缓存等。
 */
export async function bootstrap() {
  console.log('react app bootstraped');
}

/**
 * 应用每次进入都会调用 mount 方法,通常我们在这里触发应用的渲染方法
 */
export async function mount(props) {
  ReactDOM.render(<App />, props.container ? props.container.querySelector('#root') : document.getElementById('root'));
}

/**
 * 应用每次 切出/卸载 会调用的方法,通常在这里我们会卸载微应用的应用实例
 */
export async function unmount(props) {
  ReactDOM.unmountComponentAtNode(
    props.container ? props.container.querySelector('#root') : document.getElementById('root'),
  );
}

/**
 * 可选生命周期钩子,仅使用 loadMicroApp 方式加载微应用时生效
 */
export async function update(props) {
  console.log('update props', props);
}

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <React.StrictMode>
    <App />
  </React.StrictMode>
);

reportWebVitals();

然后 npm start  把  react子应用跑起来,运行如下图: 

五、创建  vue 子应用:

 

vue create child-vue

然后改造  vue 子应用的main.js

// src/main.js
import Vue from 'vue'
import App from './App'
 
Vue.config.productionTip = false
 
// 定义一个Vue实例
let instance = null
// 渲染方法
function render(props = {}) {
  const { container } = props
  instance = new Vue({
    render: (h) => h(App)
  }).$mount(container ? container.querySelector('#app'): '#app')
}
// 独立运行时
if(!window.__POWERED_BY_QIANKUN__) {
  render()
}
//暴露主应用生命周期钩子
/**
 * bootstrap : 在微应用初始化的时候调用一次,之后的生命周期里不再调用
 */
export async function bootstrap() {
  console.log('vue2-app bootstraped');
}
/**
 * mount : 在应用每次进入时调用
 */
export async function mount(props) {
  console.log('vue2-app mount', props);
  render(props);
}
/**
 * unmount :应用每次 切出/卸载 均会调用
 */
export async function unmount() {
  console.log("vue2-app unmount")
  instance.$destroy();
  instance.$el.innerHTML = '';
  instance = null;
}

修改 vue.config.js:

const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
  transpileDependencies: true,
  devServer: {
    port: 8888
  }
})

然后运行  vue  子应用即可

另外,有两个问题还没有解决:

        1.子应用资源引入问题 ,默认使用的主应用的地址

        2.主应用偶尔报错:

  

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/456389.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【python】centos 8新装python3.10.0

1.python源码包准备 2.gcc环境安装 如果系统已具备&#xff0c;可以略过。 有的已经自带了gcc&#xff0c;但是如果编译时启动优化的话&#xff0c;如果gcc版本过老就必须要升级。 3.make环境安装 如果系统已具备&#xff0c;可以略过。 4.更新openssl版本&#xff08;很重…

如何打开EDI文件?

使用EDI系统传输文件的过程中&#xff0c;用户可能会遇到这样的问题&#xff1a;如何打开EDI文件&#xff1f;电脑不在身边如何查看EDI文件&#xff1f;EDI文件未按照标准格式呈现如何梳理&#xff1f;为了解决上述问题&#xff0c;方便用户查看文件&#xff0c;知行之桥EDI系统…

Java Web程序的部署

写在前&#xff1a;要想将我们写好的项目让其他人可以访问&#xff0c;仅仅完成代码是不能直接运行的。这就需要在Linux系统上搭建Java web程序的运行环境。这里以我所做的博客系统为例&#xff0c;进行搭建。 1. 准备依赖 &#xff08;1&#xff09;JVM&#xff08;JDK&#…

在unity中生成一个随机数

1.首先建立一个画布和空对象 2.创建脚本并将代码复制进去 using System.Collections; using System.Collections.Generic; using TMPro; using UnityEngine; public class suijishu : MonoBehaviour {public TextMeshProUGUI sjs;void Update(){if (Input.GetKeyDown(KeyCode.…

300m的视频如何制作二维码?扫码点击播放视频的在线技巧

如何快速将几十M或者几百M的视频文件做成二维码呢&#xff1f;用二维码来展示视频是现在很流行的一种方式&#xff0c;比如产品说明、自拍录像、企业介绍、使用教程等方面的内容&#xff0c;都可以通过这种方式来完成视频内容的传递。 其实视频生成二维码的方法没有想象中的那…

YOLOv9算法原理——使用可编程梯度信息学习想要学习的内容

前言 2023年1月发布YOLOv8正式版后&#xff0c;经过一年多的等待&#xff0c;YOLOv9终于面世了&#xff01;YOLO是一种利用图像全局信息进行目标检测的系统。自从2015年Joseph Redmon、Ali Farhadi等人提出了第一代模型以来&#xff0c;该领域的研究者们已经对YOLO进行了多次更…

微信小程序问题定位——sourcemap文件

使用sourceMap在微信小程序中进行线上问题定位&#xff0c;主要可以通过以下步骤实现&#xff1a; 下载微信开发者工具首先&#xff0c;确保已经安装了微信开发者工具&#xff0c;这是进行小程序开发和调试的基础。登录微信公众平台并下载sourceMap文件&#xff1a;登录微信小…

【Redis】Redis常用命令一

1.keys&#xff1a;返回所有满足条件的key&#xff0c;比如&#xff1a; KEYS pattern时间复杂度&#xff1a;O(N)&#xff0c;返回值&#xff1a;匹配pattern的所有key。 • h?llo 匹配 hello , hallo 和 hxllo • h*llo 匹配 hllo 和 heeeello • h[ae]llo 匹配 hello 和 …

java kafka客户端何时设置的kafka消费者默认值

kafka为什么有些属性没有配置却能正常工作&#xff0c;那是因为kafka-clients对有些消费者设置了默认值&#xff0c;具体看下ConsumerConfig类的静态模块&#xff0c;具体如下所示&#xff1a; kafka为什么有些属性没有配置却能正常工作&#xff0c;那是因为kafka-clients对有…

多线程(volatile)

volatile的功能 保证内存可见性禁止指令重排序 内存可见性 简单的理解 两(多)个线程同时针对一个变量进行操作, 一个线程读, 一个线程修改, 此时读到的值不一定是修改过后的值 即读线程没有感知到变量的变化 (其实是 编译器/JVM 对于代码在多线程情况下的优化进行了误判) 从 J…

景联文科技:提供行业垂直大模型训练数据

近年来&#xff0c;以大模型为代表的人工智能技术已成为国家科技实力竞争的焦点。其中垂直大模型作为重要方向&#xff0c;在相关政策引导及市场需求的驱动下&#xff0c;已展现出较强的发展活力。 行业垂直大模型是针对特定行业的需求和场景进行深度定制的。这意味着模型在训练…

【面试精讲】深克隆和浅克隆的实现方式?深克隆和浅克隆有什么区别?

【面试精讲】深克隆和浅克隆的实现方式&#xff1f;深克隆和浅克隆有什么区别&#xff1f; 目录 本文导读 一、浅克隆&#xff08;Shallow Clone&#xff09; 二、深克隆&#xff08;Deep Clone&#xff09; 1、递归使用clone()方法实现深克隆 2、使用序列化实现深克隆 …

深入解析HashMap:结构与哈希函数揭秘一

文章目录 一、HashMap的基本结构1.数组与链表的结构1.1 数组1.2 链表 2.红黑树的简单介绍3.Node节点的组成 二、HashMap的哈希函数1.hashCode()方法的作用2.位运算与哈希值的计算3.扰动函数的作用 思考&#xff1a;为什么HashMap源码中使用位运算 在Java编程语言中&#xff0c;…

Docker进阶:深入了解 Dockerfile

Docker进阶&#xff1a;深入了解 Dockerfile 一、Dockerfile 概述二、Dockerfile 优点三、Dockerfile 编写规则四、Dockerfile 中常用的指令1、FROM2、LABEL3、RUN4、CMD5、ENTRYPOINT6、COPY7、ADD8、WORKDIR9、 ENV10、EXPOSE11、VOLUME12、USER13、注释14、ONBUILD 命令15、…

解决方案-Windows下cmd输入nvidia-smi命令无效

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 问题描述 nvidia-smi是 NVIDIA System Management Interface 的缩写&#xff0c;是 NVIDIA 提供的用于管理和监控 NVIDIA GPU 设备…

爱普生小体积贴片晶振独特的蚀刻工艺

爱普生EPSON它是全球最大的打印机生产企业也是石英品体元器件生产厂家,品种齐全而且生产工艺也是世界顶尖的企业,不论在制作工艺上还是切割蚀刻工艺技术上都是比较先进的,它的一项千赫兹AT切产品足以让电子行业的人为之钦佩,在2010年发布的全球晶振企业排行榜爱普生占据首位,以…

IDEA管理Git + Gitee 常用操作

文章目录 IDEA管理Git Gitee 常用操作1.Gitee创建代码仓库1.创建仓库1.点击新建仓库2.完成仓库信息填写3.创建成功4.管理菜单可以修改这个项目的设置 2.设置SSH公钥免密登录基本介绍1.找到.ssh目录2.执行指令 ssh-keygen3.将公钥信息添加到码云账户1.点击设置2.ssh公钥3.复制.…

挖到宝了!这几款AI知识库原来这么好用!

随着人工智能的发展&#xff0c;我们的工作和生活越来越依赖这些智能化的工具。其中&#xff0c;AI知识库已经成为我们管理和获取知识的重要工具之一。今天我要为大家推荐三款好用的AI知识库&#xff0c;无论你是企业用户还是个人用户&#xff0c;相信一定能找到你心仪的那一个…

HTML5+CSS3+JS小实例:全屏背景切换动画

实例:全屏背景切换动画 技术栈:HTML+CSS+JS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-s…

英飞凌电源管理PMIC的安全应用

摘要 本篇文档主要用来介绍英飞凌电源管理芯片TLF35584的使用&#xff0c;基于电动助力转向应用来介绍。包含一些安全机制的执行。 TLF35584介绍 TLF35584是英飞凌推出的针对车辆安全应用的电源管理芯片&#xff0c;符合ASIL D安全等级要求&#xff0c;具有高效多电源输出通道&…
最新文章