single-spa、乾坤、friday接入实战

本文详细介绍了如何使用single-spa和qiankun实现微前端架构,包括父子应用的配置、生命周期管理以及解决样式和JS隔离的问题。同时,文章还探讨了single-spa的优缺点,并展示了qiankun如何弥补这些不足。通过实例代码展示,读者可以了解到微前端应用的开发流程和关键点。

前言

最近开发的项目中有使用到微前端,微前端在我这分为两大类,iframesingle-spa系列,在这篇文章我会记录下微应用的 single-spa、乾坤的使用和一些理解,我们公司内部的friday没有开源,在这里就不记录了。

single-spa

single-spa使用

新建father、child两个vue项目

father(父应用)

1. 安装single-spa基座
npm install single-spa --save
2. 开始配置

main.js配置

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import { registerApplication, start } from 'single-spa'

Vue.config.productionTip = false

// 远程加载子应用
function createScript(url) {
  return new Promise((resolve, reject) => {
    const script = document.createElement('script')
    script.src = url
    script.onload = resolve
    script.onerror = reject
    const firstScript = document.getElementsByTagName('script')[0]
    firstScript.parentNode.insertBefore(script, firstScript)
  })
}


// 记载函数,返回一个 promise
function loadApp(url, globalVar) {
  // 支持远程加载子应用
  return async () => {
    // 
    await createScript(url + '/js/chunk-vendors.js')
    await createScript(url + '/js/app.js')
    // 这里的return很重要,需要从这个全局对象中拿到子应用暴露出来的生命周期函数
    return window[globalVar]
  }
}

const apps = [
  {
    // 子应用名称
    name: 'child',
    // 子应用加载函数,是一个promise
    app: loadApp('http://localhost:3000', 'child'),
    // 当路由满足条件时(返回true),激活(挂载)子应用
    activeWhen: location => location.pathname.startsWith('/child'),
    // 传递给子应用的对象
    customProps: {}
  },
  {
    name: 'son',
    app: loadApp('http://localhost:3001', 'son'),
    activeWhen: location => location.pathname.startsWith('/son'),
    customProps: {}
  }
]

// 注册子应用
for (let i = apps.length - 1; i >= 0; i--) {
  registerApplication(apps[i])
}
new Vue({
  router, 
  mounted() {
    // 启动,开启微应用生命周期
    start()
  },
  render: h => h(App)
}).$mount('#app')

路由配置

import Vue from 'vue'
import VueRouter from 'vue-router'

Vue.use(VueRouter)

const routes = []

const router = new VueRouter({
  mode: 'history',
  routes
})

export default router

App.vue配置

<template>
  <div id="app">
    <div id="nav">
      <router-link to="/child">微应用1</router-
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值