精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

基于 Qiankun 微前端實踐- 從零到一篇

開發 前端
微前端就是將不同的功能按照不同的維度拆分成多個子應用。通過主應用來加載這些子應用。微前端的核心在于拆,拆完后再合!

簡短的概括:微前端痛點與解決問題

1?使用背景

1)在同一個頁面可以使用多個前端框架(React, AngularJS, Vue 等);

2)用新框架編寫新代碼,無需重寫已有的 app;

3)代碼的延遲加載可以縮減初次加載時長;

2?主要解決的問題:

1)在一個 app 中不同的模塊由不同的團隊維護,而每個團隊所用的技術棧可能不同,而且發版周期不同。

2)所使用的前端框架升級負擔,新版本可能存在不兼容的更新,升級后可能對已有的業務產生 bug,造成難以升級。限制了前端框架新版本的使用。

一、為什么需要微前端

「~ 微前端導圖 ~」

我們通過 3w (what,why,how) 的方式來講解微前端

1、what? 什么是微前端?

微前端就是將不同的功能按照不同的維度拆分成多個子應用。通過主應用來加載這些子應用。

微前端的核心在于拆,拆完后再合!

微前端架構具備以下幾個核心價值:(重要)(摘自 qiankun官方文檔)

1)技術棧無關

主框架不限制接入應用的技術棧,微應用具備完全自主權;

2)獨立開發、獨立部署

微應用倉庫獨立,前后端可獨立開發,部署完成后主框架自動完成同步更新;

3)增量升級

在面對各種復雜場景時,我們通常很難對一個已經存在的系統做全量的技術棧升級或重構,而微前端是一種非常好的實施漸進式重構的手段和策略;

4)獨立運行時

每個微應用之間狀態隔離,運行時狀態不共享;

2、why? 為什么去使用他?

1)不同團隊間開發同一個應用技術棧不同怎么破?

2)希望每個團隊都可以獨立開發,獨立部署怎么破?

3)項目中還需要老的應用代碼怎么破?

我們是不是可以將一個應用劃分成若干個子應用,將子應用打包成一個個的lib。當路徑切換時加載不同的子應用。這樣每個子應用都是獨立的,技術棧也不用做限制了!從而解決了前端協同開發問題。

3、How? 怎么落地微前端?

2018年 Single-SPA 誕生了,single-spa 是一個用于前端微服務化的 JavaScript 前端解決方案(本身沒有處理樣式隔離,js 執行隔離)實現了路由劫持和應用加載。

說明:single-spa 解決了以應用為維度的路由,應用的注冊,監聽,最重要的是賦予了應用生命周期和生命周期相關事件。

*Single-SPA 缺陷:不夠靈活,不能動態加載js文件;樣式不隔離,沒有js沙箱的機制。

2019年 qiankun 是微前端框架,提供了更加開箱即用的 API (single-spa + sandbox + import-html-entry),它基于 single-spa,具備 js 沙箱、樣式隔離、HTML Loader、預加載 等微前端系統所需的能力。qiakun 升級 2.0 后,支持多個微應用的同時加載,有了這個特性,我們基本可以像接入 iframe 一樣方便的接入微應用。

*總結:子應用可以獨立構建,運行時動態加載,主子應用完全解耦,技術棧無關,靠的是協議接入(子應用必須導出 bootstrap,mount,unmount方法)

擴展:

1)Single-SPA 官網地址:

https://zh-hans.single-spa.js.org/docs/getting-started-overview

2)qiankun官網地址:

https://qiankun.umijs.org/zh

二、解決隔離的方案

1、css 隔離方案

子應用之間樣式隔離:

Dynamic Stylesheet 動態樣式表,當應用切換時移除老應用樣式,添加新應用樣式;

主應用和子應用之間的樣式隔離:

1)BEM(Block Element Modifier ) 約定項目前綴;

2)css-Modules 打包時生成不沖突的選擇器名;

3)Shadow DOM 真正意義上的隔離;

4)css-in-js

2、沙箱 shaowDom

*css 解決方法:

// domapi
// 外界無法訪問 shadow dom
let shadowDOM = document.getElementById('x').attachShadow({mode: 'closed'});
let pElm = document.createElement('p');
pElm.innerHTML = 'hello';
let styleElm = document.createElement('style');
styleElm.textContent = `
p{color: red}
`
shadowDOM.appendchild(styleElm);
shadowDOM.appendchild(pElm);

*JS 沙箱 proxy

快照沙箱簡單理解:1年前拍一張 在拍一張 (將區別保存起來) 在回到一年前

源碼實踐

let sandbox = new SnapshotSandbox();

class SnapshotSandbox{
constructor(){
this.proxy = window; // window屬性
this.modifyPropsmap = {}; // 記錄在window上的修改
this.active();
}
active() { // 激活
this.windowSnapshot = {}; //拍照
for(const prop in window) {
if(window.hasOwnProperty(prop)){
this.windowsnapshot[prop] = window[prop];
}
}
object.keys(this.modifyPropsMap).forEach(p=>{
window[p] = this.modifyPropsMap[p];
})
}

inactive(){ // 失活
for(const prop in window){
if(window.hasOwnProperty(prop)){
if(window[prop] !== this.windowsnapshot[prop]){
this.modifyPropsMap[prop] = window[prop];
window[prop] = this.windowsnapshot[prop]
}
}
}
}
}

// 應用的運行 從開始到結束, 切換后不會影響全局
((window)=> {
window.a = 1;
window.b = 2;
console.log(window.a,window.b);
sandbox.inactive();
console.log(window.a,window.b);
sandbox.active();
console.log(window.a,window.b);
})(sandbox.proxy); // sandbox.proxy 就是window
// 如果是多個子應用就不能使用這種方式了,es6proxy
// 代理沙箱可以實現多應用沙箱。把不同的應用用不同的代理來處理

三、qiankun (乾坤) 項目實踐

*將普通的項目改造成 qiankun 主應用基座,需要進行三步操作:

1、創建微應用容器 - 用于承載微應用,渲染顯示微應用

2、注冊微應用 - 設置微應用激活條件,微應用地址等等;

3、啟動 qiankun;

擴展:主應用不限技術棧,只需要提供一個容器 DOM,然后注冊微應用并 start 即可。

*微前端 qiankun 項目實踐:主應用(基座)配置 react 17.0.2,子應用配置 vue 2.6.10

詳細配置如下:

1. 主應用(基座)配置 react 17.0.2

1.1 主應用為子應用準備的 展示元素 (文件:src/App.js )

import {BrowserRouter as Router,Link} from 'react-router-dom'
function App() {
return (
<div className="App">
<Router>
<Link to="/vue">vue應用</Link>
</Router>
{/* 切換導航, 將微應用渲染container容器中 */}

<div id="container"></div>
</div>
);
}

export default App;

1.2 引入react 渲染,注冊 registerApps (文件:src/index.js )

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import './registerApps'

ReactDOM.render(
<App />,
document.getElementById('root')
);

1.3 在主應用中注冊微應用(文件:src/registerApps.js)

1?安裝 qiankun (建議安裝:qiankun 2.X以上,支持多個微應用的同時加載)

yarn add qiankun 或者 npm i qiankun

相關配置信息:

// ------ Step1 引入 qiankun
import { registerMicroApps, start } from 'qiankun'; // 底層是基于single-spa

// ----- Step2 注冊子應用
registerMicroApps([{
name: 'm-vue',
entry: '//localhost:20000',
container: '#container',
activeRule: '/vue',
},
], {
beforeLoad: () => {
console.log('加載前')
},
beforeMount: () => {
console.log('掛在前')
},
afterMount: () => {
console.log('掛載后')
},
beforeUnmount: () => {
console.log('銷毀前')
},
afterUnmount: () => {
console.log('銷毀后')
},
})

// ----- Step3 啟動應用
start();

2. 子應用配置 vue 2.6.10

主應用基座只有一個主頁,現在我們需要接入微應用。

qiankun 內部通過 import-entry-html 加載微應用,要求微應用需要導出生命周期鉤子函數(見下圖)。

從上圖可以看出,qiankun 內部會校驗微應用的生命周期鉤子函數,如果微應用沒有導出這三個生命周期鉤子函數,則微應用會加載失敗。

如果我們使用了腳手架搭建微應用的話,我們可以通過 webpack 配置在入口文件處導出這三個生命周期鉤子函數。如果沒有使用腳手架的話,也可以直接在微應用的 window 上掛載這三個生命周期鉤子函數。

2.1 調整子應用 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('#app'); // 這里是掛載到自己的html中 基座會拿到這個掛載后的html 將其插入進去
}

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

// 需要暴露接入協議
export async function bootstrap(props) {
console.log('[vue] vue app bootstraped');
};
export async function mount(props) {
console.log('[vue] props from main framework', props);
render(props);
}
export async function unmount(props) {
instance.$destroy();
instance.$el.innerHTML = '';
instance = null;
router = null;
}

說明:導出相應的生命周期鉤子函數。

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

*擴展資源:

/**
* bootstrap 只會在微應用初始化的時候調用一次,下次微應用重新進入時會直接調用 mount 鉤子,不會再重復觸發 bootstrap。
* 通常我們可以在這里做一些全局變量的初始化,比如不會在 unmount 階段被銷毀的應用級別的緩存等。
*/
export async function bootstrap() {
console.log('[vue] vue app bootstraped');
}

/**
* (重要)應用每次進入都會調用 mount 方法,通常我們在這里觸發應用的渲染方法
*/
export async function mount(props) {
console.log('[vue] props from main framework', props);
storeTest(props);
render(props);
}

/**
* 應用每次 切出/卸載 會調用的方法,通常在這里我們會卸載微應用的應用實例
*/
export async function unmount() {
instance.$destroy();
instance.$el.innerHTML = '';
instance = null;
router = null;
}

/**
* 可選生命周期鉤子,僅使用 loadMicroApp 方式加載微應用時生效
*/
export async function update(props) {
console.log('update props', props);
}

2.2 新建 vue.config.js,配置如下

module.exports = {
devServer:{
port:10000,
headers:{
// 解決跨域
'Access-Control-Allow-Origin':'*'
}
},
configureWebpack:{
output:{
// 把子應用打包成 umd 庫格式
library: `${name}-[name]`,
libraryTarget: 'umd',
jsonpFunction: `webpackJsonp_${name}`,
}
}
}

*基于 qiankun 微前端項目 (實踐代碼庫)

https://github.com/jiasx/mic-front-vue2.0

https://github.com/jiasx/mic-front-react

責任編輯:姜華 來源: 前端學苑
相關推薦

2020-05-06 09:25:10

微前端qiankun架構

2022-07-27 22:56:45

前端應用緩存qiankun

2021-11-24 22:42:15

WorkManagerAPI

2020-03-09 17:28:51

NoSQLMongoDB數據庫

2020-09-10 06:56:12

SringMVC源碼參數

2021-01-14 07:15:19

NginxWeb服務器

2021-07-29 07:55:20

React實踐代碼

2021-07-08 07:30:13

Webpack 前端Tree shakin

2022-03-04 08:17:53

PageRank網絡等級

2020-08-03 10:00:11

前端登錄服務器

2022-09-20 07:33:15

Jenkinshttps://mp

2021-08-07 21:51:17

服務器網站部署

2023-01-12 22:00:48

2023-02-20 09:55:00

微服務框架單體架構

2021-10-28 07:10:21

rollupPlugin插件編寫

2020-01-08 09:44:59

運維架構技術

2025-02-24 12:20:14

2021-08-15 22:52:30

前端H5拼圖

2019-07-15 07:58:10

前端開發技術
點贊
收藏

51CTO技術棧公眾號

日韩欧美国产中文字幕| 美腿丝袜亚洲一区| 亚洲第一免费网站| 男人舔女人下面高潮视频| 成人精品一区二区三区校园激情 | 国产妇女馒头高清泬20p多| 天天干天天爽天天操| 另类小说一区二区三区| 国产+人+亚洲| 天堂网av2018| 青草久久视频| 欧美一区二区美女| 国产福利一区视频| 不卡一本毛片| 亚洲欧美国产77777| 精品久久久久久乱码天堂| 亚洲一区二区三区网站| 国产模特精品视频久久久久| xxx成人少妇69| 亚洲蜜桃精久久久久久久久久久久| 日韩精品一页| 色欧美片视频在线观看| av在线com| 免费av网站在线看| 国产日韩欧美一区二区三区乱码 | 五月婷婷另类国产| 久久精品国产精品亚洲精品色| 污污视频在线免费看| 久国产精品韩国三级视频| 欧美一级淫片播放口| www.5588.com毛片| 日产精品一区二区| 亚洲色在线视频| 美女又爽又黄免费| 久久久久久亚洲精品美女| 91成人免费网站| 尤物av无码色av无码| 青草青在线视频| 最新日韩在线视频| 在线观看成人av| 91涩漫在线观看| 欧美国产日韩一二三区| 欧美激情视频一区二区三区| 日本免费不卡视频| 成人性色生活片| 99久久精品免费看国产四区| 国产特级黄色片| 亚洲男人天堂2023| 亚洲自拍三区| 在线观看h片| 国产色一区二区| 欧美一区二区综合| 日韩a在线观看| 91美女片黄在线观看| 国产精品一区二区在线观看| 亚洲国产一二三区| 成人91在线观看| 国产日韩三区| 深夜视频在线免费| 久久亚洲欧美国产精品乐播| 久久久综合香蕉尹人综合网| 午夜性色福利视频| 久久久久久久久久久黄色| 欧美污视频久久久| jzzjzzjzz亚洲成熟少妇| 国产精品热久久久久夜色精品三区| 亚洲黄色一区二区三区| 麻豆传媒视频在线观看| 亚洲色图欧美偷拍| 亚洲色成人www永久在线观看| 国模私拍视频在线播放| 狠狠久久五月精品中文字幕| 欧美精品99久久| 欧美影视资讯| 欧美一区二区三区公司| www.四虎在线| 国产探花在线精品一区二区| 色偷偷偷综合中文字幕;dd| 欧美一级特黄高清视频| 欧美日韩国产成人精品| 日本a级片电影一区二区| 中文字幕日本人妻久久久免费 | 欧美精品一卡| 2024亚洲男人天堂| 一区二区国产欧美| 波波电影院一区二区三区| 欧美午夜精品理论片a级大开眼界 欧美午夜精品久久久久免费视 | 午夜一区不卡| 91精品国产综合久久久久久蜜臀| 99久久久久成人国产免费| 成人精品在线视频观看| 日韩精品欧美在线| 欧美色图天堂| 在线一区二区三区四区五区| a级大片免费看| 综合亚洲自拍| 欧美精品在线免费播放| 国产成人无码av| 国产激情一区二区三区四区 | 国产精品一区在线播放| www.久久热.com| 亚洲18色成人| 99九九精品视频| 免费成人结看片| 欧美激情xxxxx| 中文字幕一区2区3区| 成人免费va视频| 制服诱惑一区| 成人啊v在线| 亚洲黄页网在线观看| 我要看黄色一级片| 日本欧美加勒比视频| 国产精品午夜av在线| 久草免费在线观看| 在线视频一区二区三区| 黄网站在线免费| 久久久久久久久久电影| av在线免费观看国产| 中文.日本.精品| 日韩精品亚洲元码| 免费在线观看黄色av| 久久97超碰国产精品超碰| 欧美少妇一区| 涩涩视频在线| 亚洲第一男人天堂| 免费麻豆国产一区二区三区四区| 免费看欧美美女黄的网站| 久久亚洲一区二区| 51精品在线| 日韩精品一区国产麻豆| 天海翼在线视频| 蜜臀va亚洲va欧美va天堂 | 你懂的网站在线| 亚洲美女淫视频| 第一区免费在线观看| 欧洲杯足球赛直播| 国产精品久久999| 黄色影院在线播放| 色哦色哦哦色天天综合| 人妻无码一区二区三区| 韩国欧美一区| 福利视频一区二区三区| 手机在线免费观看av| 日韩区在线观看| 精品国产乱码久久久久久鸭王1| 国内成人自拍视频| 欧美性受xxxx黑人猛交88| 麻豆久久久久| 久久精品91久久香蕉加勒比| 亚洲一区二区三区网站| 中文字幕在线观看不卡| 国产精品久久久久久久av福利| 91欧美大片| 亚洲free嫩bbb| 色呦呦在线免费观看| 日韩精品一区二区三区视频| 国产一级二级毛片| 99久久伊人精品| 久久久精品在线视频| 久久不见久久见国语| 国产精品久久久| 秋霞成人影院| 日韩欧美视频在线| 国产一卡二卡在线| 久久久777精品电影网影网| 中文字幕有码av| 亚洲a一区二区三区| 亚洲xxx大片| 欧美另类老肥妇| 亚洲欧美日韩另类| 一区二区三区精彩视频| 樱桃国产成人精品视频| 麻豆精品国产传媒av| 久热国产精品| 久久av秘一区二区三区| 成人精品毛片| 日韩美女主播视频| 高h视频在线观看| 日韩av在线直播| 亚洲一线在线观看| 亚洲不卡一区二区三区| 影音先锋制服丝袜| 国产精品影音先锋| 成年人观看网站| 91精品国产麻豆国产在线观看| 国产一区二区三区奇米久涩 | 不卡视频一区二区三区| 中文字幕高清在线播放| 色偷偷偷亚洲综合网另类| 亚洲精品综合网| 欧美在线看片a免费观看| 在线免费观看亚洲视频| 96av麻豆蜜桃一区二区| www.国产福利| 国产免费成人| 久久久久福利视频| 国语产色综合| 国产精品久久亚洲7777| 国语自产精品视频在线看抢先版结局 | 捆绑凌虐一区二区三区| 久久99精品久久久久久国产越南| 亚洲不卡中文字幕无码| 91精品啪在线观看国产18| 蜜桃成人免费视频| 免费精品一区| 国产精品久久久久久久久影视| 色婷婷av在线| 在线不卡国产精品| 日色在线视频| 亚洲成avwww人| 一二三区中文字幕| 色综合天天综合网国产成人综合天| 小早川怜子一区二区的演员表| 久久精品一区二区三区不卡牛牛| 亚洲女则毛耸耸bbw| 国内不卡的二区三区中文字幕 | 亚洲欧美国产另类| 黄频网站在线观看| 日韩免费成人网| 国产又爽又黄免费软件| 欧美亚洲一区二区在线| 91浏览器在线观看| 亚洲国产成人av网| 乱h高h女3p含苞待放| 亚洲欧洲日韩av| 日韩精品电影一区二区三区| 久久精品日韩一区二区三区| 中文字幕免费在线播放| 成a人片亚洲日本久久| 色哟哟免费视频| 国内精品国产三级国产a久久| 欧美成人三级在线播放| 日韩在线一区二区三区| 激情六月丁香婷婷| 亚洲综合精品| 国产91在线视频观看| 亚洲另类视频| 男人添女人下面高潮视频| 亚洲狼人精品一区二区三区| 日韩黄色片在线| 影音先锋亚洲电影| 99热亚洲精品| 国产欧美精品久久| 久久精品国产精品亚洲色婷婷| 亚洲欧美网站| 老熟妇仑乱视频一区二区| 美女日韩在线中文字幕| 亚洲精品乱码久久久久久自慰| 久久国产精品毛片| 国产成人综合一区| 日本不卡一二三区黄网| 日本黄大片一区二区三区| 久久国产成人午夜av影院| 国内国产精品天干天干| 国产老妇另类xxxxx| 动漫美女无遮挡免费| gogogo免费视频观看亚洲一| 亚洲黄色免费在线观看| 国产日韩精品一区| 日本 欧美 国产| 亚洲人成影院在线观看| 免费在线一区二区三区| 午夜国产精品一区| 五月婷婷激情视频| 欧美天天综合网| 99热这里只有精品在线| 精品国产sm最大网站免费看| 涩涩视频在线观看免费| 中文字幕精品—区二区| 二区在线播放| 欧美与黑人午夜性猛交久久久| 影视一区二区三区| 亚洲www在线观看| 波多野结衣在线一区二区| 欧美日韩一区在线观看视频| 日本一区二区在线看| 99国产精品白浆在线观看免费| 国产情侣一区| 国产三级三级看三级| 国产ts人妖一区二区| 亚洲图片另类小说| 亚洲人成网站色在线观看| 国产一区二区三区影院| 在线观看欧美黄色| www.97超碰| 国产性猛交xxxx免费看久久| 69成人在线| 国产成人中文字幕| 在线精品国产亚洲| 色阁综合av| 91久久在线| 成人不卡免费视频| 91色porny| 久久久久久久福利| 欧美图区在线视频| 午夜国产在线视频| 欧美成人精品一区| 日韩高清在线| 久久av二区| 欧美在线首页| 亚洲欧美日韩三级| 久久综合精品国产一区二区三区| 91嫩草丨国产丨精品| 色婷婷av一区二区三区之一色屋| 午夜精品久久久久久久爽| 中国人与牲禽动交精品| 国产传媒av在线| 18成人在线| 久久精品欧美一区| 天天爱天天操天天干| 91一区二区在线观看| 欧美日韩国产精品综合| 欧美三级一区二区| 理论视频在线| 97香蕉超级碰碰久久免费软件| 精品国产亚洲一区二区三区| 日韩动漫在线观看| 亚洲一区二区毛片| 精品熟女一区二区三区| 亚洲黄色在线视频| 国产女主播福利| 色偷偷av一区二区三区乱| 91看片一区| 欧美日韩在线一区二区三区| 日韩午夜免费| 久久久久久久久久影视| 亚洲欧美国产三级| 国产一区二区三区三州| 最好看的2019的中文字幕视频| 色婷婷综合久久久中字幕精品久久| 国产精品自拍首页| 亚洲大片在线| 91九色蝌蚪porny| 一区二区成人在线| 亚洲精品久久久久久久久久| 久久亚洲精品中文字幕冲田杏梨| 国产成人免费精品| 亚洲成色www久久网站| 日韩成人伦理电影在线观看| 成年人免费观看视频网站 | 久久久影视精品| 国偷自产av一区二区三区| 蜜臀av色欲a片无码精品一区 | 4438x亚洲最大成人网| 欧美18hd| 97人摸人人澡人人人超一碰| 午夜视频精品| 亚洲无人区码一码二码三码| 亚洲精品国产精品乱码不99| 国产www免费观看| 欧美激情视频一区二区三区不卡| 在线精品国产亚洲| 麻豆tv在线播放| 国产亚洲一本大道中文在线| 五月天中文字幕| 日韩综合中文字幕| 深夜福利一区| 国产综合中文字幕| 久久你懂得1024| 中文字幕有码无码人妻av蜜桃| 精品国产欧美一区二区五十路| 国产一区二区av在线| 97碰在线视频| 久久久久国产一区二区三区四区| 久久久久久无码午夜精品直播| 精品国偷自产在线| 97se亚洲| 日韩 欧美 高清| 亚洲天堂精品视频| 欧美一级淫片免费视频魅影视频| 欧美亚洲激情视频| 久久一区二区三区电影| 中国男女全黄大片| 欧美日韩在线免费| 欧美另类极品| 国模一区二区三区私拍视频| 久久国产66| 538精品在线观看| 亚洲无线码在线一区观看| 欧美男男gaygay1069| 91九色丨porny丨国产jk| 国产蜜臀97一区二区三区| 精品国产一级片| 日韩av免费在线| 欧美激情亚洲| 亚洲一区二区自偷自拍| 日韩区在线观看| 日韩av超清在线观看| 第九区2中文字幕| 国产亚洲女人久久久久毛片| 性一交一乱一精一晶| 国产精品va在线播放我和闺蜜| 欧美有码视频| 免费看裸体网站| 亚洲国产成人爱av在线播放| a成人v在线| 国产淫片免费看| 亚洲精品欧美综合四区| 国产系列在线观看| 国产不卡一区二区三区在线观看 |