微前端-qiankun

微前端提供通過不同技術(shù)棧培他、能夠以單獨發(fā)布的方式將多個子應用構(gòu)建成一個主應用的技術(shù)方案。
所以結(jié)構(gòu)分為主框架遗座,和任意多個子應用舀凛。

核心價值
  1. 和技術(shù)棧無關(guān),每個子應用可以選擇不同的技術(shù)棧
  2. 子應用可以單獨開發(fā)途蒋、部署猛遍,部署完后主框架自動完成同步更新。
  3. 每個子應用可以獨立運行
使用場景

一般適用于較大型的項目号坡,需要將項目拆分成多個子應用并合并懊烤,不同的業(yè)務模塊之間相對獨立,可單獨開發(fā)部署的項目宽堆。

Dome
  1. 建三個項目腌紧,包括一個主應用(qiankun-base),兩個子應用(qiankun-vue畜隶、qiankun-react) 可以用腳手架生成(vue create 壁肋、create-react-app)
  2. 安裝包 qiankun
  3. 盡量端口號不一樣,保證三個項目能夠同時跑起來
主應用(qiankun-base)

dome選擇vue作為基座
修改入口文件src/App.vue

<template>
  <div id="app">
    <el-menu :router="true" mode="horizontal">
      <!--基座中可以放自己的路由-->
      <el-menu-item index="/">Home</el-menu-item>
      <!--引用其他子應用路由-->
      <el-menu-item index="/vue">vue應用</el-menu-item>
      <el-menu-item index="/react">react應用</el-menu-item>
    </el-menu>
    <!-- 主應用自己的路由 -->
    <router-view></router-view>
    <!-- 子應用的渲染位置 -->
    <div id="vue"></div>
    <div id="react"></div>
  </div>
</template>

修改src/main.js引入qiankun

// 引入qiankun
import { registerMicroApps, start } from 'qiankun';

const apps = [
  {
    name: 'vueApp', // 子應用的名字
    entry: '//localhost:8081', // 默認會加載這個html 解析里面的js 動態(tài)的執(zhí)行 (子應用必須支持跨域)fetch
    container: '#vue', // App.vue中容器名(此項目頁面中定義的容器id籽慢,用于把對應的子應用放到此容器中)
    activeRule: '/vue', // 激活的路徑
    props: { a: 1 } // 傳遞的值(可選)
  },
  {
    name: 'reactApp',
    entry: '//localhost:20000', // 默認會加載這個html 解析里面的js 動態(tài)的執(zhí)行 (子應用必須支持跨域)fetch
    container: '#react',
    activeRule: '/react',
  }
]
registerMicroApps(apps); // 注冊應用
start({
  prefetch: false // 取消預加載
});// 開啟
const router = new VueRouter({
    mode: "history",
    routes,
  });
new Vue({
    router,
    render: h => h(App),
  }).$mount('#app')
子應用(qiankun-vue)

src/main.js

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

// Vue.config.productionTip = false

let instance = null
function render(props) {
  instance = new Vue({
    // router,
    render: h => h(App)
  }).$mount('#vueApp'); // 這里是掛載到自己的html中  基座會拿到這個掛載后的html 將其插入進去
}

if (window.__POWERED_BY_QIANKUN__) { // 動態(tài)添加publicPath
  __webpack_public_path__ = window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__;
}
if (!window.__POWERED_BY_QIANKUN__) { // 默認獨立運行
  render();
}

// 父應用加載子應用浸遗,子應用必須暴露三個接口:bootstrap、mount箱亿、unmount
// 子組件的協(xié)議就ok了
export async function bootstrap(props) {

};

export async function mount(props) {
  render(props)
}

export async function unmount(props) {
  instance.$destroy();
}

public/index.html

<div id="vueApp"></div>

vue.config.js

module.exports = {
    lintOnSave: false,  // 關(guān)閉eslint檢測
    devServer: {
        port: 8080,//這里的端口是必須和父應用配置的子應用端口一致
        headers: {
            //因為qiankun內(nèi)部請求都是fetch來請求資源跛锌,所以子應用必須允許跨域
            'Access-Control-Allow-Origin': '*'
        }
    },
    configureWebpack: {
        output: {
            //資源打包路徑
            library: 'vueApp',
            libraryTarget: 'umd'
        }
    }
}
子應用(qiankun-react)

安裝包:react-app-rewired
src/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(){
 
}
export async function mount() {
  render()
}
export async function unmount(){
  ReactDOM.unmountComponentAtNode( document.getElementById('root'));  // 卸載節(jié)點
}

qiankun-react下創(chuàng)建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
        }
    }
}

qiankun-react下創(chuàng)建.env文件

PORT=20000
BROWSER=none

修改package.json的啟動命令

"scripts": {
    "start": "react-app-rewired start",
    "build": "react-app-rewired build",
    "test": "react-app-rewired test",
    "eject": "react-app-rewired eject"
  },
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市届惋,隨后出現(xiàn)的幾起案子察净,更是在濱河造成了極大的恐慌驾茴,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件氢卡,死亡現(xiàn)場離奇詭異,居然都是意外死亡晨缴,警方通過查閱死者的電腦和手機译秦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來击碗,“玉大人筑悴,你說我怎么就攤上這事∩酝荆” “怎么了阁吝?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長械拍。 經(jīng)常有香客問我突勇,道長,這世上最難降的妖魔是什么坷虑? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任甲馋,我火速辦了婚禮,結(jié)果婚禮上迄损,老公的妹妹穿的比我還像新娘定躏。我一直安慰自己,他們只是感情好芹敌,可當我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布痊远。 她就那樣靜靜地躺著,像睡著了一般氏捞。 火紅的嫁衣襯著肌膚如雪碧聪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天幌衣,我揣著相機與錄音矾削,去河邊找鬼。 笑死豁护,一個胖子當著我的面吹牛哼凯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播楚里,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼断部,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了班缎?” 一聲冷哼從身側(cè)響起蝴光,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤她渴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蔑祟,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體趁耗,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年疆虚,在試婚紗的時候發(fā)現(xiàn)自己被綠了苛败。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡径簿,死狀恐怖罢屈,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情篇亭,我是刑警寧澤缠捌,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站译蒂,受9級特大地震影響曼月,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蹂随,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一十嘿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧岳锁,春花似錦绩衷、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至乒躺,卻和暖如春招盲,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背嘉冒。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工曹货, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人讳推。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓顶籽,卻偏偏與公主長得像,于是被迫代替她去往敵國和親银觅。 傳聞我的和親對象是個殘疾皇子礼饱,可洞房花燭夜當晚...
    茶點故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內(nèi)容