qiankun--微前端可用小demo(主应用vue+子应用vue+子应用react)

2023-10-24 23:50

本文主要是介绍qiankun--微前端可用小demo(主应用vue+子应用vue+子应用react),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

qiankun–微前端可用小demo(主应用vue+子应用vue+子应用react)

说明:

在主应用的about页面加载子应用

成果:

加载子应用1,点击第一个按钮
请添加图片描述

子应用2,点击第二个按钮

请添加图片描述

注意:如果已经渲染一个子应用,切换另一个子应用的时候先返回about页面(自动清理上一个子应用),再点击切换按钮

代码:

主应用(vue实现)

1、初始化

使用vue-cli新建vue2项目(带router)

vue create base

安装qiankun

$ yarn add qiankun # 或者 npm i qiankun -S

2、修改main.js

import Vue from 'vue'
import App from './App.vue'
import router from './router'//引入qiankun--备份
import {registerMicroApps} from 'qiankun';
//注册app列表
const apps = [{name: 'vueApp',entry: '//localhost:9999',//自动加载,解析js,动态执行,需解决跨域container: '#cmsApp',//子应用挂载元素activeRule: '/about/cmsApp',//激活规则,访问该规则时,挂载props: {a: 1}},{name: 'reactapp',entry: '//localhost:20000',//自动加载,解析js,动态执行,需解决跨域container: '#cmsApp',activeRule: '/about/react'}
]
registerMicroApps(apps);//可以按需设置生命周期方法new Vue({router,render: h => h(App)
}).$mount('#app')

3、修改APP.vue

<template><div><!-- id --><router-link to="/">基座应用自己主页</router-link><router-link to="/about">基座应用自己about</router-link><router-view/></div>
</template><style></style>

4、修改about.vue

<template><div class="about"><p>基座的about</p><button @click="$router.push('/about/cmsApp')">调子应用</button><button @click="$router.push('/about/react')">调子应用</button><!-- 子应用挂载的节点 --><div id="cmsApp"></div></div>
</template><script>
import {start} from 'qiankun';
export default {mounted() {console.log('sss');start();//在调用页面加载}
}
</script>

5、启动

npm run serve

子应用(vue实现)

1、初始化

使用vue-cli新建vue2项目(带router)

vue create app1

2、修改main.js

import Vue from 'vue'
import App from './App.vue'
import router from './router'let instance = null;
function render() {instance = new Vue({router,render: h => h(App)}).$mount('#app')//还是渲染到自己的html里,基座会把该html挂载
};if (!window.__POWERED_BY_QIANKUN__) {//默认独立运行render();
}
if (window.__POWERED_BY_QIANKUN__) {__webpack_public_path__ = window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__;
}
export async function bootstrap(props){};export async function mount(props){console.log(props)render()
};
export async function unmount(props){instance.$destroy()
};

3、新建vue.config.js(子应用项目根目录)


module.exports = {devServer: {port:9999,headers:{'Access-Control-Allow-Origin':'*'}},configureWebpack:{output:{library:'vueApp',libraryTarget:'umd'}}
}

4、启动

npm run serve

子应用(react实现)

a. 创建react应用

npx create-react-app my-app

b. 安装yarn

npm install -g yarn

c. 安装react-app-rewired

yarn add react-app-rewired

d. 安装react-router-dom

yarn add react-router-dom

e. 创建config-overrides.js(子应用项目根目录)

配置应用启动、打包和跨域参数

config-overrides.js

module.exports = {webpack:(config)=>{config.output.library = 'reactApp';config.output.libraryTarget = 'umd';config.output.publicPath = 'http://localhost:20000/';return config;},devServer:(configFunction)=>{return function(proxy,allowedHost){const config = configFunction(proxy,allowedHost);config.headers = {'Access-Control-Allow-Origin':'*'}return config;}}
}

f. 修改package.json

..."scripts": {"start": "react-app-rewired start","build": "react-app-rewired build","test": "react-app-rewired test","eject": "react-app-rewired eject"},...

g. 修改index.js

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
function render(){ReactDOM.render(<React.StrictMode><App /></React.StrictMode>,document.getElementById('root'));
};if(!Window.__POWERED_BY_QIANKUN__){render()
}
export async function bootstrap(props){};export async function mount(props){render()
};
export async function unmount(props){ReactDOM.unmountComponentAtNode(document.getElementById('root'))
};

h. 修改app.js


import logo from './logo.svg';
import './App.css';function App() {return (<div className="App"><header className="App-header"><img src={logo} className="App-logo" alt="logo" /><p>Edit <code>src/App.js</code> and save to reload.</p><aclassName="App-link"href="https://reactjs.org"target="_blank"rel="noopener noreferrer">Learn React</a></header></div>);
}
export default App;

i. 启动

npm start

创建react项目失败,可自行百度,index.js按照如上修改即可

 <aclassName="App-link"href="https://reactjs.org"target="_blank"rel="noopener noreferrer">Learn React</a></header>
</div>

);
}
export default App;


### i. 启动

npm start


创建react项目失败,可自行百度,index.js按照如上修改即可

这篇关于qiankun--微前端可用小demo(主应用vue+子应用vue+子应用react)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/278593

相关文章

Python将博客内容html导出为Markdown格式

《Python将博客内容html导出为Markdown格式》Python将博客内容html导出为Markdown格式,通过博客url地址抓取文章,分析并提取出文章标题和内容,将内容构建成html,再转... 目录一、为什么要搞?二、准备如何搞?三、说搞咱就搞!抓取文章提取内容构建html转存markdown

在React中引入Tailwind CSS的完整指南

《在React中引入TailwindCSS的完整指南》在现代前端开发中,使用UI库可以显著提高开发效率,TailwindCSS是一个功能类优先的CSS框架,本文将详细介绍如何在Reac... 目录前言一、Tailwind css 简介二、创建 React 项目使用 Create React App 创建项目

vue使用docxtemplater导出word

《vue使用docxtemplater导出word》docxtemplater是一种邮件合并工具,以编程方式使用并处理条件、循环,并且可以扩展以插入任何内容,下面我们来看看如何使用docxtempl... 目录docxtemplatervue使用docxtemplater导出word安装常用语法 封装导出方

MySQL双主搭建+keepalived高可用的实现

《MySQL双主搭建+keepalived高可用的实现》本文主要介绍了MySQL双主搭建+keepalived高可用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、测试环境准备二、主从搭建1.创建复制用户2.创建复制关系3.开启复制,确认复制是否成功4.同

Springboot处理跨域的实现方式(附Demo)

《Springboot处理跨域的实现方式(附Demo)》:本文主要介绍Springboot处理跨域的实现方式(附Demo),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录Springboot处理跨域的方式1. 基本知识2. @CrossOrigin3. 全局跨域设置4.

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

Vue中组件之间传值的六种方式(完整版)

《Vue中组件之间传值的六种方式(完整版)》组件是vue.js最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用,针对不同的使用场景,如何选择行之有效的通信方式... 目录前言方法一、props/$emit1.父组件向子组件传值2.子组件向父组件传值(通过事件形式)方

css中的 vertical-align与line-height作用详解

《css中的vertical-align与line-height作用详解》:本文主要介绍了CSS中的`vertical-align`和`line-height`属性,包括它们的作用、适用元素、属性值、常见使用场景、常见问题及解决方案,详细内容请阅读本文,希望能对你有所帮助... 目录vertical-ali