微前端-基座搭建


title: 微前端-基座搭建
date: 2023-04-23 19:30:00
categories: 基座搭建
tags: 微前端


微前端是現(xiàn)在企業(yè)級應(yīng)用無法避免的一個(gè)問題

微前端是一種類似于微服務(wù)的架構(gòu)咬腋,它將微服務(wù)的理念應(yīng)用于瀏覽器端洗鸵,即將單頁面前端應(yīng)用由單一的單體應(yīng)用轉(zhuǎn)變?yōu)榘讯鄠€(gè)小型前端應(yīng)用聚合為一的應(yīng)用次坡。各個(gè)前端應(yīng)用還可以獨(dú)立開發(fā)埃唯、獨(dú)立部署正罢。

微前端架構(gòu)旨在解決單體應(yīng)用在一個(gè)相對長的時(shí)間跨度下敷硅,由于參與的人員、團(tuán)隊(duì)的增多、變遷潭枣,從一個(gè)普通應(yīng)用演變成一個(gè)巨石應(yīng)用(Frontend Monolith)后,隨之而來的應(yīng)用不可維護(hù)的問題幻捏。這類問題在企業(yè)級 Web 應(yīng)用中尤其常見盆犁。

微前端的實(shí)現(xiàn)意味著對前端應(yīng)用的拆分。拆分應(yīng)用的目的并不只是為了在架構(gòu)上好看篡九,它還可以提升開發(fā)效率谐岁。比如 10 萬行的代碼拆解成 10 個(gè)項(xiàng)目,每個(gè)項(xiàng)目 1 萬行代碼榛臼,要獨(dú)立維護(hù)每個(gè)項(xiàng)目就會(huì)容易得多伊佃。而我們只需要實(shí)現(xiàn)應(yīng)用的自治,即實(shí)現(xiàn)應(yīng)用的獨(dú)立開發(fā)和獨(dú)立部署讽坏,就可以在某種程度上實(shí)現(xiàn)微前端架構(gòu)的目的锭魔。

對微前端架構(gòu)的對比個(gè)人偏好 micro-app

micro-app 是京東零售在 2021 年開源的一套微前端架構(gòu)

micro-app 的優(yōu)勢

  1. 使用簡單
    我們將所有功能都封裝到一個(gè)類 WebComponent 組件中,從而實(shí)現(xiàn)在基座應(yīng)用中嵌入一行代碼即可渲染一個(gè)微前端應(yīng)用路呜。

同時(shí) micro-app 還提供了 js 沙箱迷捧、樣式隔離织咧、元素隔離、預(yù)加載漠秋、數(shù)據(jù)通信笙蒙、靜態(tài)資源補(bǔ)全等一系列完善的功能。

  1. 零依賴
    micro-app 沒有任何依賴庆锦,這賦予它小巧的體積和更高的擴(kuò)展性捅位。

  2. 兼容所有框架
    為了保證各個(gè)業(yè)務(wù)之間獨(dú)立開發(fā)、獨(dú)立部署的能力搂抒,micro-app 做了諸多兼容艇搀,在任何技術(shù)框架中都可以正常運(yùn)行。

micro-app 的使用

  1. 基座項(xiàng)目搭建

    純粹個(gè)人偏好,將基座獨(dú)立搭建成一個(gè)項(xiàng)目求晶,該項(xiàng)目的作用就是承載基座和路由配置管理,以及公共方法數(shù)據(jù)的派發(fā)監(jiān)聽焰雕。
    使用 vue-cli 或者 webpack 創(chuàng)建項(xiàng)目,因?yàn)榫S護(hù)等問題目前在 vite 搭建的項(xiàng)目中還有很多坑不建議使用 vite,據(jù)官方所述會(huì)開發(fā) vite 兼容版本但是目前大環(huán)境下比較難等待后期再說芳杏。

  2. 當(dāng)你按照正常項(xiàng)目搭建好了之后就要下載 micro-app矩屁。
 npm i @micro-zoe/micro-app --save
  1. 在入口文件中引入插件并且執(zhí)行
// main.js || index.js
import microApp from '@micro-zoe/micro-app'

microApp.start()

  1. 正常書寫路由,但是這個(gè)時(shí)候你要考慮將子系統(tǒng)放置的位置

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

Vue.use(VueRouter)

const routes = [{
        path: '/',
        name: 'Home',
        component: () =>
            import ('../components/Home.vue')
    },
    <!-- 這里都是承載子系統(tǒng)的組件,相當(dāng)于寫了一個(gè)放置<router-view></router-view>的地方 -->
    {
        path: '/vue2/*',
        name: 'vue2',
        component: () =>
            import ('../components/vue2Page.vue')
    },
    {
        path: '/vue3/*',
        name: 'vue3',
        component: () =>
            import ('../components/vue3Page.vue')
    }
]

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

export default router

這里是基座放置子系統(tǒng)的文件 vue2Page.vue

// url就是你要導(dǎo)入進(jìn)來的子系統(tǒng)例如:https://www.baidu.com/百度
// vue2Page.vue配置
<template>
    <div>
      <h2>這是子應(yīng)用vue2的頁面</h2>
      <micro-app name='vue2Page'
                 :url='url'
                 baseroute='/vue2'
                 :data="sendData"
      ></micro-app>
    </div>
</template>

<script>
export default {
  name: 'vue2Page',
  data () {
    return {
      url:'//localhost:3000/vue2/',
      //基座 向子應(yīng)用發(fā)送信息 方式一
      sendData:{
        dec:"這個(gè)是父基座發(fā)送數(shù)據(jù)",
        title:"打印出來看看吧"
      }
    }
  }
}
</script>


這樣我們的基座就搭建好了爵赵,只要按照你需要的配置路由等吝秕。至于數(shù)據(jù)交互之類的可以后期需要的時(shí)候再配置

子系統(tǒng)配置

下面這些是我們在子系統(tǒng)開發(fā)中需要配置的

  1. 跨域支持
<!-- vue.config.js || -->
 publicPath: '/vue2', // 配置子路徑地址
    devServer: {
        port: 3000, // 此端口號必須和基座中的micro-app中配置的url地址一致
        headers: {
            'Access-Control-Allow-Origin': '*' // 開啟跨域
        }
    }

  1. 資源路徑自動(dòng)補(bǔ)全
    1. 步驟 1: 在子應(yīng)用 src 目錄下創(chuàng)建名稱為 public-path.js 的文件,并添加如下內(nèi)容
// __MICRO_APP_ENVIRONMENT__和__MICRO_APP_PUBLIC_PATH__是由micro-app注入的全局變量
if (window.__MICRO_APP_ENVIRONMENT__) {
  // eslint-disable-next-line
  __webpack_public_path__ = window.__MICRO_APP_PUBLIC_PATH__
}

  1. 步驟 2: 在子應(yīng)用入口文件的最頂部引入 public-path.js
// entry
import './public-path'

這樣就能渲染出來了空幻,這樣不管多少個(gè)項(xiàng)目都能獨(dú)立開發(fā)獨(dú)立部署烁峭,不限制技術(shù)棧了,只要將基座維護(hù)好有無限的可能氛悬。
個(gè)人博客:https://843378894.github.io/2023/04/23/%E5%BE%AE%E5%89%8D%E7%AB%AF-%E5%9F%BA%E5%BA%A7%E6%90%AD%E5%BB%BA/

`

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末则剃,一起剝皮案震驚了整個(gè)濱河市耘柱,隨后出現(xiàn)的幾起案子如捅,更是在濱河造成了極大的恐慌,老刑警劉巖调煎,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件镜遣,死亡現(xiàn)場離奇詭異,居然都是意外死亡士袄,警方通過查閱死者的電腦和手機(jī)悲关,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來娄柳,“玉大人寓辱,你說我怎么就攤上這事〕嗑埽” “怎么了秫筏?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵诱鞠,是天一觀的道長。 經(jīng)常有香客問我这敬,道長航夺,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任崔涂,我火速辦了婚禮阳掐,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘冷蚂。我一直安慰自己缭保,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布蝙茶。 她就那樣靜靜地躺著涮俄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪尸闸。 梳的紋絲不亂的頭發(fā)上彻亲,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天,我揣著相機(jī)與錄音吮廉,去河邊找鬼苞尝。 笑死,一個(gè)胖子當(dāng)著我的面吹牛宦芦,可吹牛的內(nèi)容都是我干的宙址。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼调卑,長吁一口氣:“原來是場噩夢啊……” “哼抡砂!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起恬涧,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤注益,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后溯捆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體丑搔,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年提揍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了啤月。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,137評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡劳跃,死狀恐怖谎仲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情刨仑,我是刑警寧澤郑诺,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布绞呈,位于F島的核電站,受9級特大地震影響间景,放射性物質(zhì)發(fā)生泄漏佃声。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一倘要、第九天 我趴在偏房一處隱蔽的房頂上張望圾亏。 院中可真熱鬧,春花似錦封拧、人聲如沸志鹃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽曹铃。三九已至,卻和暖如春捧杉,著一層夾襖步出監(jiān)牢的瞬間陕见,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工味抖, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留评甜,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓仔涩,卻偏偏與公主長得像忍坷,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子熔脂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評論 2 355

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