基于Vue實(shí)現(xiàn)微前端的示例代碼
前端微服務(wù)化一直是前端社區(qū)的一個熱門話題,早在2018年就有不少開發(fā)者提出過各種解決方案?;蛟S是未得精髓,個人認(rèn)為基于Web Components的實(shí)現(xiàn)脫離整體打包邏輯的,難以工程化。直到遇到了vue-cli 3,子模塊打包的問題得以迎刃而解。2019年秋,團(tuán)隊(duì)內(nèi)部初步實(shí)現(xiàn)前端分布式開發(fā),解決了集中式開發(fā)部署的“老大難”問題。個人認(rèn)為,隨著WebAssembly等技術(shù)的興起,“前端后移”越來越明顯,前端微服務(wù)會成為大前端的一個趨勢。下面簡單分享下本人對前端微服務(wù)的一些拙見。
前言
目前的前端技術(shù),大部分是基于JavaScript棧極其衍生的技術(shù)棧體系。從當(dāng)年被人戲稱為“玩具語言”發(fā)展到今天,JavaScript的經(jīng)歷可謂命途多舛。早期缺少必要的規(guī)范,讓JavaScript的生態(tài)自由的有點(diǎn)泛濫。本就是解析型語言,還多重標(biāo)準(zhǔn),誰也不能預(yù)測下一行代碼會產(chǎn)生什么結(jié)果。隨著Node.js的到來,“前端后移”歷史的車輪開始轉(zhuǎn)動了。前端的打包不再是簡單地混淆壓縮一下,出現(xiàn)了import/export模塊的概念,后端工程師嗅到了熟悉的味道。W3C的ES2015標(biāo)準(zhǔn),前端模塊化開始深入人心,Webpack逐漸成了前端開發(fā)的事實(shí)標(biāo)準(zhǔn),TpyeScript等強(qiáng)類型衍生語言也開始出現(xiàn),大前端圈空前繁榮。隨著大量了后端語言(特別是Java這類面向?qū)ο笳Z言)的標(biāo)準(zhǔn)加入,前端開發(fā)終于從Web開發(fā)中脫離出來自立門戶。前端工程化伴隨著“前后端分離”的潮流,席卷了整個互聯(lián)網(wǎng)。GitHub等開源社區(qū)上前端項(xiàng)目如雨后春筍般涌現(xiàn)。
痛點(diǎn)
前端工程化固然是好事,但前端項(xiàng)目一多就存在難以整合的問題。特別是前端技術(shù)棧不一致的情況下,React團(tuán)隊(duì)開發(fā)的小功能不能被Vue團(tuán)隊(duì)復(fù)用。前端工程也期待能擁有后端的遠(yuǎn)程調(diào)用RPC接口。通過調(diào)用前端RPC接口就能跨平臺渲染。這就好比是JVM平臺都能解析class字節(jié)碼一樣方便。目前整合不同系統(tǒng)的方案大部分是使用iframe簡單嵌套,不優(yōu)雅但能用。谷歌提出的WebAssembly可能是不錯的方案,但離商用太遠(yuǎn)。
方案
目前如何有效整合前端應(yīng)用呢?綜合考慮了新老系統(tǒng)的特點(diǎn),大致分了三種情況。
關(guān)鍵代碼如下:
<div class="puzzle-box"> <div class="puzzle-item" v-for="puzzle in puzzles" :key="puzzle.id" :style="'height:' + puzzle.height + ';width:' + puzzle.width"> <div v-if="puzzle.type === 'iframe'"> <iframe :src="puzzle.src" :style="'width:100%;height:' + puzzle.height "></iframe> </div> <div v-if="puzzle.type === 'module'"> <puzzle-module v-bind:url="puzzle.url"></puzzle-module> </div> <div v-if="puzzle.type === 'native'"> <div v-append="puzzle.content" :style="'width:100%;height:' + puzzle.height"></div> </div> </div> </div> <script> const content=`<h1>前端開發(fā)迭代計(jì)劃</h1><table class="table table-bordered table-striped table-hover"><tr><th>序號</th><th>需求</th><th>優(yōu)先級</th><th>負(fù)責(zé)人</th><th>計(jì)劃完成日期</th></tr><tr><td>1</td><td>大數(shù)據(jù)的自助分析平臺</td><td>高</td><td>工程師A</td><td>2020-04-08</td></tr><tr><td>2</td><td>自定義模板、調(diào)用時傳入XML,引擎生成報表結(jié)果</td><td>高</td><td>工程師A</td><td>2020-04-08</td></tr></table>` const puzzles = [ { id: 1, type: 'module', url: 'http://localhost:9081/list.js',width: '100%',height: '400px'}, { id: 2, type: 'native', content: content, width: '50%', height: '400px'}, { id: 3, type: 'iframe', src: 'http://cn.bing.com/',width: '50%',height: '400px'}, ] </script>
iframe嵌入
iframe嵌入是是目前大多數(shù)人使用的方式,基本沒有開發(fā)量。
原生html嵌入
這種方式外部接口提供html文本,本地系統(tǒng)劃一塊地方出來給你自己渲染,如劃一個600x800的div用來渲染報表。使用vue-append作為渲染組件。這種方式可以擺脫iframe,自由度也比較大。缺點(diǎn)是不容易實(shí)現(xiàn)規(guī)范化,有點(diǎn)像內(nèi)嵌的廣告頁面。
模塊化嵌入
使用模塊打包的概念,通過webpack將子模塊各個分拆獨(dú)立打包成模塊再通過靜態(tài)文件方式加載到外部系統(tǒng)做展現(xiàn)。這也是目前團(tuán)隊(duì)內(nèi)部使用的方案。通過遍歷模塊目錄(一般就是業(yè)務(wù)vue頁面)批量生成配置文件。
....... function readDirectory(directory) { fs.readdirSync(directory).forEach((file) => { const fullPath = path.resolve(directory, file); if (fs.statSync(fullPath).isDirectory()) { if (scanSubDirectories) readDirectory(fullPath); return; } if (!regularExpression.test(fullPath)) return; //files[directory.substring(directory.lastIndexOf(path.sep))+ path.sep +file] = fullPath files[directory.substring(parentPath.length+1)+ path.sep +file] = fullPath //console.log(files) }); } .......
最終就會按模塊輸出打包好的js文件,發(fā)布是可以實(shí)現(xiàn)按需集成。
到此這篇關(guān)于基于Vue實(shí)現(xiàn)微前端的文章就介紹到這了,更多相關(guān)基于Vue實(shí)現(xiàn)微前端內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue項(xiàng)目的表單校驗(yàn)實(shí)戰(zhàn)指南
這篇文章主要介紹了Vue項(xiàng)目表單校驗(yàn)的相關(guān)資料,前端表單校驗(yàn)?zāi)軠p少無效請求,保護(hù)后端接口,使用ElementPlus表單組件進(jìn)行校驗(yàn),需要準(zhǔn)備表單對象、規(guī)則對象并進(jìn)行雙向綁定,用戶名、密碼以及協(xié)議勾選等字段都需符合特定規(guī)則,需要的朋友可以參考下2024-10-10vue移動端下拉刷新和上拉加載的實(shí)現(xiàn)代碼
這篇文章主要介紹了vue移動端下拉刷新和上拉加載的實(shí)現(xiàn)代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-09-09vue element插件this.$confirm用法及說明(取消也可以發(fā)請求)
這篇文章主要介紹了vue element插件this.$confirm用法及說明(取消也可以發(fā)請求),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-10-10Vue Element前端應(yīng)用開發(fā)之動態(tài)菜單和路由的關(guān)聯(lián)處理
這篇文章主要介紹了Vue Element前端應(yīng)用開發(fā)之動態(tài)菜單和路由的關(guān)聯(lián)處理,對vue感興趣的同學(xué),可以參考下2021-05-05讓webpack+vue-cil項(xiàng)目不再自動打開瀏覽器的方法
今天小編就為大家分享一篇讓webpack+vue-cil項(xiàng)目不再自動打開瀏覽器的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-09-09