微前端 受衆 什麼是微前端 微前端的優勢 微前端的幾種實現方式 入門 進階

受衆

希望將某個單一的單體應用,轉化爲多個可以獨立運行、獨立開發、獨立部署、獨立維護的服務或者應用的聚合,從而滿足業務快速變化及分佈式多團隊並行開發的需求的研發團隊。

什麼是微前端

微前端架構是一種類似於微服務的架構,它將微服務的理念應用於瀏覽器端,即將 Web 應用由單一的單體應用轉變爲多個小型前端應用聚合爲一的應用。各個前端應用可以獨立運行、獨立開發、獨立部署。

微前端的優勢

  1. 在同一頁面上使用多個前端框架 而不用刷新頁面 (React, AngularJS, Angular, Ember, 你正在使用的框架)
  2. 獨立部署每一個單頁面應用
  3. 新功能使用新框架,舊的單頁應用不用重寫可以共存
  4. 改善初始加載時間,遲加載代碼

微前端的幾種實現方式

  1. 路由分發式微前端
  2. 使用iFrame創建容器
  3. 自制框架兼容應用
  4. 組合式集成:將應用微件化
  5. 純Web Components技術構建
  6. 結合Web Components構建
  7. 在Web Components中集成現有框架
  8. 集成在現有框架中的 Web Components
  9. 複合型
    複合型,就是針對實際的應用場景,選取上面的幾個類型挑幾種組合起來解決實際問題。
    參考:https://www.jianshu.com/p/785c2ca5a886

這裏我們採用路由分發式前端,來看它的代表框架-qiankun。

入門

安裝

npm i qiankun -S

使用

import { registerMicroApps, start } from 'qiankun';
registerMicroApps([
  {
    name: 'reactApp',
    entry: '//localhost:3000',
    container: '#container',
    activeRule: '/app-react',
  },
  {
    name: 'vueApp',
    entry: '//localhost:8080',
    container: '#container',
    activeRule: '/app-vue',
  },
  {
    name: 'angularApp',
    entry: '//localhost:4200',
    container: '#container',
    activeRule: '/app-angular',
  },
]);
// 啓動 qiankun
start();

進階

微應用不需要額外安裝任何其他依賴即可接入 qiankun 主應用。

1.導出相應的生命週期鉤子

微應用需要在自己的入口 js (通常就是你配置的 webpack 的 entry js) 導出 bootstrap、mount、unmount 三個生命週期鉤子,以供主應用在適當的時機調用。

/**
* 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);

}

qiankun 基於 single-spa,所以你可以在這裏找到更多關於微應用生命週期相關的文檔說明。

無 webpack 等構建工具的應用接入方式請見這裏

2.配置微應用的打包工具

除了代碼中暴露出相應的生命週期鉤子之外,爲了讓主應用能正確識別微應用暴露出來的一些信息,微應用的打包工具需要增加如下配置:

webpack:

const packageName = require('./package.json').name;

module.exports = {

 output: {

 library: `${packageName}-[name]`,

 libraryTarget: 'umd',

 jsonpFunction: `webpackJsonp_${packageName}`,

 },

};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章