爲什麼 single-spa 纔是微前端的正確開發模式

原文地址:https://juejin.cn/post/7183954579690618936

一、前言

說到微前端大家可能並不會感到陌生,在平時的項目開發中或多或少有接觸過,近幾年國內也是出現了一批比較火的微前端開發框架 qiankun、Micro App、EMP 等, 這些框架能夠讓我們快速的搭建起微前端的開發環境,能夠快速的與現有的項目進行融合,同時在面對一些常見的場景問題時也給出了具體的解決方案。

正因如此每當我問身邊的同學或者同事什麼是微前端時,他們都會講這些微前端框架官網的概念給我講一遍,比如獨立開發部署、技術棧無關、項目之間彼此隔離等,然後我就會反問這是真正的微前端嗎?或者說這是微前端正確的開發模式嗎?本系列文章會通過講解 single-spa[1] 帶大家重新認識微前端,以及微前端的正確開發模式。

二、什麼是微前端?

微前端是一種架構風格,旨在當一個項目需要由多個小而散的微應用組合時,這些微應用可以獨立開發、測試和部署,最終聚合成一個產品進行交付。

三、微前端具備的能力

必備能力

優質微前端要具備的能力

前面講完了微前端所必備的幾個能力,下面將介紹一個優質 / 完善的微前端還應該具備哪幾個能力,這也是 single-spa 作者在官網中重點提出的幾個能力,這裏極力推薦大家去看一下 singe-spa 的官網,他可以說是我們微前端界的紅寶書。

四、國內外是怎麼定義微前端的?

上面我們介紹的微前端的概念都是來自 single-spa ,他可以說是國外非常具有代表性的微前端框架,國內我們就選取一個非常具有代表性的微前端框架 —— qiankun,我們先來看一下 qiankun 它是怎麼定義微前端的:

我們看到前三個其實就是我們上面講的微前端必須具備的三個能力沒有問題,最大的差別就是第四個概念,qiankun 要求所有的微應用必須彼此之間相互隔離,運行時狀態不共享,這不是和我們前面講的優質微前端要具備的能力恰好相反嗎?qiankun 爲什麼要這麼設計?

這個問題我們可以仔細思考一下 qiankun 誕生時的背景:

面對這些問題,當前採用的最好的方案是開發出來一套能夠大大減少接入成本同時又能夠避免項目之間的相互影響的微前端框架,這也就有了大量的 css 隔離方案、js 隔離方案等。

我們再來看看 single-spa 他是怎麼看待衝突問題的:

single-spa 他明確了在微前端項目中全局樣式局部樣式是可以存在的,下面他分別講了一些開發全局樣式局部樣式的方法,比如最常見的局部樣式開發方案有 CSS Modules、Styled Components、PostCSS Prefix 等。

通過這個我們基本就能看出國內外對微前端的開發模式是不同的,single-spa 所提倡的是治理,要求所有的微應用都按照一定的開發規範去開發,這也和我們一開始給出的微前端的定義是相照應的——先拆再合,而國內的微前端框架是先合再拆,針對項目中已有的問題提供相應的解決方案,從而大大減小微前端項目的開發成本。所以他們走的方向也是不同的。

五、總結

本篇文章通過 single-spa 闡述了什麼是微前端,以及一個優質的 / 完善的微前端應該要具備哪些能力,最後介紹了國內外對微前端的一些不同的看法,總的來說國內的微前端框架它的優勢是利舊性好, 面對技術棧雜亂無章的,重疊嚴重,代碼質量較低的場景,都有比較好的效果,但是也就是因爲利舊性好才衍生出來一系列的問題,比如說如何在隔離的條件下做應用通信、依賴共享、跨應用導入等,也期待後面官方能給出相應的解決方案。

參考資料

[1]

single-spa: https://link.juejin.cn?target=https%3A%2F%2Fsingle-spa.js.org%2Fdocs%2Fmicrofrontends-concept

[2]

react 上下文中: https://link.juejin.cn?target=https%3A%2F%2Freactjs.org%2Fwarnings%2Finvalid-hook-call-warning.html

關於前端技術磚家

磚家,brickspert

前螞蟻集團前端技術專家

開源庫 ahooks 作者,10k+ star ⭐️

開源庫 antd mobile 前負責人,10k+ star ⭐️

你可以在以下渠道找到我:

公衆號:前端技術磚家

B 站:前端技術磚家

知乎:磚家

掘金:前端技術磚家

Github:brickspert

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/RzNvq8t5_UFYcJZLBBF2XQ