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

news2024/11/15 23:03:43

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.coloradmin.cn/o/1517561.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3D全景:为各行业提供更真实的交互体验

近年来&#xff0c;随着科技的不断发展&#xff0c;3D全景技术逐渐融入到了我们的日常生活中来。3D全景技术的应用落地&#xff0c;为广大用户提供了全新的视觉体验&#xff0c;让人们能够更加真实、直观地感受各行业的场景。 3D全景的优势就在于真实感和互动性&#xff0c;可以…

代码训练LeetCode(11)删除有序数组中的重复项II

代码训练(11)LeetCode之删除有序数组中的重复项II Author: Once Day Date: 2024年3月14日 漫漫长路&#xff0c;才刚刚开始… 全系列文章可参考专栏: 十年代码训练_Once-Day的博客-CSDN博客 参考文章: 80. 删除有序数组中的重复项 II - 力扣&#xff08;LeetCode&#xff…

AI 大模型赋能手机影像,小米14 Ultra 让真实有层次

2月22日&#xff0c;小米龙年第一场重磅发布会&#xff0c;正式发布专业影像旗舰小米14 Ultra。 此前小米发布的两代 Ultra&#xff0c;在不同维度&#xff0c;引领了移动影像行业的走向。最新的小米14 Ultra 在定义的时候&#xff0c;我们反复在思考&#xff1a;怎么才能把移动…

三维高斯是什么

最近3DGS的爆火&#xff0c;引发了一众对三维高斯表达场景的研究。这里的三维高斯是什么&#xff1f;本文用简答的描述和简单实验来呈现三维高斯的数学意义。本文没有公式推导&#xff0c;主打一个意会。 我们高中都学过高斯分布&#xff0c;即一个钟形曲线。它的特点是有一个…

OpenAI的GPT-4.5 Turbo:意外曝光且可能在六月份推出

网络媒体THE DECODER的联合创始人兼出版人Matthias认为&#xff0c;人工智能技术将彻底改变人类和计算机的互动方式。 最新消息显示&#xff0c;OpenAI的最新力作GPT-4.5 Turbo已经在网络上意外曝光。首批发现此信息的是Bing和DuckDuck Go等搜索引擎&#xff0c;它们在官方发布…

吴恩达deeplearning.ai:独热编码One-hot连续有价值的特征回归树

以下内容有任何不理解可以翻看我之前的博客哦&#xff1a;吴恩达deeplearning.ai专栏 文章目录 One-hot编码连续有价值的特征回归树 在之前的决策树例子中&#xff0c;每个分裂都只有两种选择&#xff0c;但是今天我们将提到一种新的分裂方式叫做One-hot&#xff0c;可以解决以…

Redis开发规范与性能优化(二)

开发规范与性能优化 3.客户端使用 1.【推荐】避免多个应用使用一个Redis示例 正例:不相干的业务拆分&#xff0c;公共数据库做服务化 2.【推荐】使用带有连接池的数据库&#xff0c;可以有效控制链接&#xff0c;同时提高效率&#xff0c;标准使用方式如代码所示 public c…

Python Web开发记录 Day10:Django part4 靓号管理与优化

名人说&#xff1a;莫道桑榆晚&#xff0c;为霞尚满天。——刘禹锡&#xff08;刘梦得&#xff0c;诗豪&#xff09; 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 1、数据库准备2、靓号列表3、新建靓号4、编辑靓…

无人机自动返航算法部署与飞行控制实践

一、环境准备 无人机硬件&#xff1a;确保你有一台支持自定义飞行控制的无人机&#xff0c;通常配备有Pixhawk或其他类似的飞行控制器。 地面站软件&#xff1a;安装如Mission Planner或QGroundControl等地面站软件&#xff0c;用于配置无人机参数和上传飞行控制代码。 编程环…

Hadoop大数据应用:NFS网关 连接 HDFS集群

目录 一、实验 1.环境 2.NFS网关 连接 HDFS集群 3. NFS客户端挂载HDFS文件系统 二、问题 1.关闭服务报错 2.rsync 同步报错 3. mount挂载有哪些参数 一、实验 1.环境 &#xff08;1&#xff09;主机 表1 主机 主机架构软件版本IP备注hadoop NameNode &#xff08;…

ASP.NET

Web控件 Web控件-内部控件 ASP.NET引入一组称为”内部控件”的新控件&#xff0c;它们专门用于ASP.NET 内部控件的使用方法与HTML控件相同&#xff0c;它们映射到HTML元素并通过使用 runat”server”属性在服务器上执行 Web控件-列表控件 这些控件用于在Web页中创建数据列表…

Revit二次开发,tuple,valuetuple,anonymousType匿名类型的区别,笔记记录

Revit二次开发&#xff0c;tuple&#xff0c;valuetuple&#xff0c;anonymousType匿名类型的区别&#xff0c;笔记记录 Tuple<int, string> tuple new Tuple<int, string>(1, "hello");//tuple ValueTuple<int, string> valueTuple (1, "…

叶顺舟:手机SoC音频趋势洞察与端侧AI技术探讨 | 演讲嘉宾公布

后续将陆续揭秘更多演讲嘉宾&#xff01; 请持续关注&#xff01; 2024中国国际音频产业大会(GAS)将于2024年3.27 - 28日在上海张江科学会堂举办。大会将以“音无界&#xff0c;未来&#xff08;Audio&#xff0c; Future&#xff09;”为主题。大会由中国电子音响行业协会、上…

Hive3.0.0安装初始化过程,schematool -dbType mysql -initSchema报错

详细如下&#xff1a; 从字面意思理解&#xff0c;是在hive-site.xml文件3213行出现了非法字符&#xff0c;处理步骤如下 1、使用vi 3213 hive-site.xml打开文件 2、删除“&#8”&#xff0c;保存文件 3、再次执行初始化命令 schematool -dbType mysql -initSchema 4、登…

交换机/路由器的存储介质-华三

交换机/路由器的存储介质-华三 本文主要介绍网络设备的存储介质组成。 ROM(read-only memory&#xff0c;只读存储器) 用于存储 BootROM程序。BootROM程序是一个微缩的引导程序&#xff0c;主要任务是查找应用程序文件并引导到操作系统&#xff0c;在应用程序文件或配置文件出…

基于检索增强的 GPT-3.5 的文本到 SQL 框架,具有样本感知提示和动态修订链。

文章目录 一、论文关键信息二、基础概念三、主要内容1. Motivations2. Insights3. 解决方案的关键4. 实验 四、总结与讨论 &#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、论文关键信息 论文标题&#xff1a;Retrieval-augmented GPT-3.5-based T…

Windows安装及配置jdk

Windows安装及配置jdk Windows安装及配置jdk下载安装环境变量配置JAVA_HOME和JRE_HOME 配置Path验证环境 Windows安装及配置jdk 下载安装 JDK的下载是免费的&#xff0c;可以直接去官网下载最新版本&#xff0c;比较安全&#xff0c;安装的时候直接点击下一步到底&#xff0c;…

人生就像是一场旅行,房子和车子不过是旅途中的临时栖息地和代步工具

图片由AI生成 人生就像是一场漫无目的的旅行&#xff0c;房子和车子不过是旅途中的临时栖息地和代步工具。 我们费尽心思&#xff0c;经过无数个日夜的奋斗&#xff0c;终于有了自己的车和房&#xff0c;以为这就是生活的全部。 但&#xff0c;物质的堆砌永远无法定义我们的价值…

unity3d Animal Controller的Animal组件中Speeds,States和modes基础部分理解

Speeds 速度集是修改你可以做的原始动画,增加或减少运动,旋转,或动画速度。它们与 州 所以,当动物在运动状态下,在飞行或游泳时,你可以有不同的速度 如果你的性格动画是 (已到位), 你一定要调整速度 位置 和 旋转 每一种的价值观 速度装置 …否则,它们不会移动或旋转。 每个速…

微服务分布式springcloud研究生志愿填报辅助系统

本文讲述了研究生志愿填报辅助系统。结合电子管理系统的特点&#xff0c;分析了研究生志愿填报辅助系统的背景&#xff0c;给出了研究生志愿填报辅助系统实现的设计方案。 本论文主要完成不同用户的权限划分&#xff0c;不同用户具有不同权限的操作功能&#xff0c;在用户模块&…