[微前端实战]---039 子应用接入微前端-vue2,vue3

子应用接入微前端-vue2,vue3


你将学到

  1. 主应用要获取子应用的生命周期,方法(控制子应用的加载/卸载)

  2. 微前端框架中获取子应用的结构,和依赖文件…

对子应用进行改造

一. vue2

vue2/config.js

const packageName = 'vue2';


module.exports = {
    ...
 output: {
      // 把子应用打包成 umd 库格式 commonjs 浏览器,node环境
+     libraryTarget: 'umd',
+     filename: `${packageName}.js`, // 打包后的文件名
+     library: `${packageName}`,// 可以通过window.vue2 获取应用的内容
+     jsonpFunction: `webpackJsonp_${packageName}`,// 用来按需加载chunk的JSONP函数
    },
};

library: 'library' // 名字随便取,代表我们全局暴露的变量

增加配置后

$	cd vue2
$	npm start

可以看到挂载到全局的变量vue2

``http://localhost:8080/#/energy`

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jMzI1TPV-1661614941526)(img/image-20220827232843510.png)]

修改vue2/main.js

import Vue from 'vue'
import App from './App.vue'

// 引入路由
import router from './router';

Vue.config.productionTip = false

+ let instance = null // 定义对象接收实例
+ const render = ()=>{
+   instance = new Vue({
+     router,
+     render: h => h(App),
+   }).$mount('#app-vue')
+ }
+ 
+ if(!window.__MICRO_WEB__){ // 如果不是微前端环境,执行render
+   render()
+ }
+ 
+ // 如果在微前端环境,暴露生命周期
+ 
+ // 开始加载结构 (加载前的处理, 如参数处理..)
+ export const bootstrap = ()=>{
+   console.log("开始加载");
+ }
+ 
+ 
+ // 
+ export const mount = ()=>{
+   console.log("渲染成功");
+   render()
+ }
+ 
+ export const unmount = ()=>{
+   console.log("卸载", instance);
+   // 卸载时候卸载vue实例,卸载事件,清空当前根元素的内容
+ }

增加bootstrap,mount,unmount生命周期,

如果在不在微前端框架: 即 cd vue2 && npm start 启动, 直接render

如果在微前端框架中: 即根目录执行npm start , 会执行bootstrap,mount,unmount 生命周期进行挂载

再次在控制台查看window.vue2, 发现已经挂载到了全局实例中


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EfDBGTmW-1661614941530)(img/image-20220827234007574.png)]

定义__MICRO_WEB__ 字段:, 微前端环境字段

方法:

bootstrap

mount

unmount

feat:vue2微前端改造

二. vue3

修改类似vue2

vue3/config.js

const packageName = 'vue3';


module.exports = {
    ...
 output: {
      // 把子应用打包成 umd 库格式 commonjs 浏览器,node环境
+     libraryTarget: 'umd',
+     filename: `${packageName}.js`, // 打包后的文件名
+     library: `${packageName}`,// 可以通过window.vue3 获取应用的内容
+     jsonpFunction: `webpackJsonp_${packageName}`,// 用来按需加载chunk的JSONP函数
    },
};

修改vue3/main.js

import { createApp } from 'vue'
import App from './App.vue'
import router from './router'

+ let instance = null // 定义对象接收实例
+ 
+ 
+ const render = () => {
+     instance = createApp(App)
+     // 挂载vue实例
+     instance.use(router).mount('#app')
+ }
+ 
+ if (!window.__MICRO_WEB__) { // 如果不是微前端环境,执行render
+     render()
+ }
+ 
+ // 如果在微前端环境,暴露生命周期
+ 
+ // 开始加载结构 (加载前的处理, 如参数处理..)
+ export const bootstrap = () => {
+     console.log("开始加载");
+ }
+ 
+ 
+ // 
+ export const mount = () => {
+     console.log("渲染成功");
+     render()
+ }
+ 
+ export const unmount = () => {
+     console.log("卸载", instance);
+      // 卸载时候卸载vue实例,卸载事件,清空当前根元素的内容
+ }

http://localhost:8081/#/index 输入window.vue3

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tL9u11EX-1661673584489)(img/image-20220828154915938.png)]

feat:vue3微前端改造

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小李科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值