最近在作公司微前端,整理了一份微前端搭建清單,若是你正在考慮是否要作微前端,不妨作個參考。前端
第一步,咱們須要進行需求分析,以便真正清楚咱們須要解決的問題是什麼。webpack
例如:web
前兩個需求是典型的業務需求,它的核心在於解決公司的業務問題,對於這一類需求,一般技術難度都不大,開發者只須要按照原型圖,編寫出對應的頁面就能夠了。docker
後兩個需求是典型的技術需求,它的核心在於解決技術問題。一般來講,技術需求和用戶體驗有關,但不會影響項目功能,因此通常產品不多會提技術需求,都是由開發同窗主導。後端
目前不少公司都不過重視技術需求,主要是由於和公司業務無關,不能帶來真實可見的收益。其實否則,一些技術需求每每能產生巨大的成本收益,因此咱們在作技術需求時,首先須要獲得公司的支持。瀏覽器
解決一個技術需求,有不少種方法,爲何選微前端?服務器
咱們看過微前端的發展史就會明白,它並非憑空出現的,而是項目在不斷髮展過程當中造成的,解決項目臃腫的技術方案。cookie
一個項目在剛成立時,體量很小,但隨着項目不斷作大,可能會出現如下問題:架構
對於這些問題,很難找到一個完美的解決方案,因而就誕生了微前端。框架
有了微前端以後,咱們能將一個大項目拆分紅多個小項目,這樣一來,每個小項目就很是好優化了。在優化了全部的小項目後,咱們再將這些小項目組合起來,就能造成一個完美的大項目了。
在實際項目中,若是遇到如下問題,能夠考慮使用微前端:
除此以外,還有不少實際狀況沒有列舉完畢,不過不要緊,只要咱們明白了微前端的特色,就能判斷任何狀況。
微前端的核心是解決巨石應用,它都有這些特色:
簡單、鬆耦合的代碼庫
增量升級
獨立部署
團隊自治
除此以外,微前端提供了一套新的生態系統。它經過拆分小項目,產生了大量的微應用。試想一下,若是你們都將微應用上傳到雲,那麼就會構建一個很是強大的微應用雲生態。咱們在之後作需求時,也許就是選擇各類適合的微應用,而後拼接起來,就完事了。對此保持期待。
固然,微前端也不是萬能的,它也存在如下問題:
這些問題大可能是由於項目拆分紅多個項目以後,引起的溝通協做問題。
第二步,咱們須要肯定具體的微前端實現方式。
實現微前端有不少種方式:
路由分發式
前端容器化
前端微服務化
微件化
微應用化
應用組件化
下圖是各類方案的優缺點:
這麼多方案,各有利弊,咱們應該如何選擇呢?
有了技術方案以後,微前端這條路就能夠走通了,除此以外,還需考慮過渡方案。
過渡方案指的是如何讓微前端平滑上線。試想一下,若是在微前端改造時,項目來了新需求,這時應該怎麼辦?
對於這個問題,建議在作微前端改造時,最好快速上線:
主項目快速搭建好路由、子應用管理,而後當即上線。
第三步,咱們須要想一想,咱們要怎麼拆分咱們的項目呢?
常見的拆分方案以下:
按照業務拆分
按照權限拆分
按照變動的頻率拆分
按照組織結構拆分
跟隨後端微服務拆分
到了這裏,咱們已經完成了微前端的拆分,但並非拆完了就結束了,咱們還考慮一些拆分後的問題。
例如:
這些問題每每和業務相關,咱們在改造時自行判斷便可。
最後一步,咱們須要考慮部署流程。
當微前端開發完成以後,咱們的項目由 1 個變成了 1 + n(子項目) 個,部署方式勢必會發生變化。
傳統的部署方式以下:
微前端項目部署方式以下:
能夠看到,項目最終的結構已經徹底不一樣了,開發,測試,部署的流程也都須要進行變化。
開發環境其實不須要部署,一般是前端啓動一個 localhost 頁面,去調後端的接口進行開發。
須要注意的是:
測試環境部署變化挺大的,並且涉及到了跨部門溝通,因此應該謹慎對待。
之前測試部署流程是:前端只須要提供一個打包文件,測試將文件解壓後,放入指定的靜態資源目錄便可。
微前端以後的部署流程:前端須要提供主項目和相關子項目的打包文件,測試須要分別發佈多個項目,才能進行測試。
這樣改動以後,測試的工做量變大了,對於手動部署的測試來講,確實有很大的影響。爲了減小測試的工做量,咱們能夠協助測試來搭建一套自動化部署工具。
不少大廠都有本身內部的雲服務平臺,就像阿里雲的 k8s 控制檯同樣,測試能夠在控制檯上選擇須要部署的前端、後端的分支,而後點擊一鍵部署,就搞定了。
對於線上環境來講,運行的是 1 個主項目和 n 個子項目,每一個項目都是獨立部署且相互獨立的,很是適合容器化部署,即:每個項目都被部署到一個 docker 中,彼此經過主項目進行關聯。
如圖,全部的子項目都交由主項目管理。
若是公司內部作了持續部署,部署就會更加簡單。
本文從需求分析開始,一步一步理清了微前端須要注意的各類問題,以及一些解決方案,但願能對微前端感興趣的你有所收穫。
其實,微前端沒有想象中的那麼難,若是是用 qiankun、single-spa 等現成框架,學習成本都很是低,關鍵是要真正動手去作,只要開了頭,後面的問題也就不是什麼問題了。
最後,若是你對此有任何想法,歡迎留言評論!