當前位置:首頁 » 網頁前端 » vue微前端技術選型交流
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

vue微前端技術選型交流

發布時間: 2023-07-10 08:07:11

① 輕量、高效、功能強大的微前端框架-MicroApp

這幾年後端的微服務是比較火爆,我們公司目前只要是新項目,基本上都是基於微服務去架構的,那麼微前端是什麼呢?

微前端是借鑒了微服務的架構理念,核心在於將一個龐大的前端應用拆分成多個獨立靈活的小型應用,每個應用都可以獨立開發、獨立運行、獨立部署,再將這些小型應用融合為一個完整的應用,或者將原本運行已久、沒有關聯的幾個應用融合為一個應用。微前端既可以將多個項目融合為一,又可以減少項目之間的耦合,提升項目擴展性,相比一整塊的前端倉庫,微前端架構下的前端倉庫傾向於更小更靈活

以前我們為了把幾個獨立運行的小型應用合並成一個應用都是通過iframe的方式去實現的,如果不考慮體驗問題,iframe 幾乎是最完美的微前端解決方案了。

iframe 最大的特性就是提供了瀏覽器原生的硬隔離方案,不論是樣式隔離、js 隔離這類問題統統都能被完美解決。但他的最大問題也在於他的隔離性無法被突破,導致應用間上下文無法被共享,隨之帶來的開發體驗、產品體驗的問題

micro-app不是基於iframe架構的

micro-app提供了js沙箱、樣式隔離、元素隔離、預載入、數據通信、靜態資源補全等一系列完善的開箱即用功能

micro-app沒有任何依賴

為了保證各個業務之間獨立開發、獨立部署的能力,micro-app做了諸多兼容,在任何技術框架中都可以正常運行。

下面我講一下如何在Vue中使用micro-app

1、初始化一個基座應用

2、基座應用的文件修改

main.js修改

router.js修改

3、main-page.vue頁面

4、創建一個子應用

5、子應用的router.js文件修改

6、src目錄下新建 public-path.js

7、 main.js 引入public-path.js

到此這個簡單的微應用就搭好了

覺得效果不錯的請幫忙加個關注點個贊,經常分享前端實用開發技巧

② 5分鍾看懂VUE項目

VUE是前端開發框架。誕生於2014年吧。

原始的前端開發框架需要工程師寫html、寫css、寫javascript(js)。js是腳本語言,瀏覽器可以運行js來執行一些js支持的動作,例如點擊反饋,下拉菜單、操作html的DOM元素之類。這樣開放效率就很低了。

後來誕生了一些前端開發框架,VUE就是其中之一。目前在國內前端開發中,特別是手機app的h5頁面的開發部分,被很多公司採用。

使用VUE開發的時候,不需要js直接操作html元素,只需要管理js的變數值,html會自動更新這些值。傳統的html配合js能完成的功能,VUE都給出了實現方案,開發只寫簡單的html和js語句就可以實現。

VUE開發的工具一般是visio stdio code(vscode),稍微適應兩天就可以熟練應用了。還是很強大的。

但是vscode本身只是編輯器,開發編譯類語言需要自己配編譯環境,具體我沒配過。

前端開發不需要配編譯環境了,只需要把需要的各種庫、工具在命令行界面安裝就行。具體過程網上搜「從零開始搭建vue項目」。

剛建立好的項目一定是下面這種目錄結構(ranktable.vue是我後加的

這對於新手村的人會引起頭暈嘔吐,老子啥都沒寫就出來這么多文件,不但數量不少,文件種類還齊全。

學習VUE別想一下吃的太多,除非你本身前端經驗豐富。否則先看懂紅色箭頭的幾個文件吧,看懂這幾個就算入門了。看的順序嚴格按照下面這樣。

index.html->main.js->App.vue->index.js->HelloWorld.vue

我將這幾個文件大概講一講,你就能有個清晰的脈絡了。

一、index.html

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<meta name="viewport" content="width=device-width,initial-scale=1.0">

<title>tradedatapy</title>

</head>

<body>

<div id="app"></div>

</body>

</html>

頁面開發當然是要有html了,VUE開發也不例外。這個html就是整個項目的入口了。只不過是<body>裡面過於簡單。<div id="app"></div>表示本html綁定了一個id為app的VUE對象。

二、main.js

new Vue({ //new Vue語句就是定義了一個VUE對象

el: '#app', //vue對象的id是app

router,

components: { App }, //vue的組件名是APP

template: '<App/>' //template 名是APP

})

這就定義了一個app的VUE對象,index.html就可以找到它了。
三、App.vue

<template>

<div id="app">

<router-view/>

</div>

</template>

<script>

export default {

name: 'App' //export 了名為App的組件,main.js就可以找到它了

}

</script>

上面的template都理解為html的一部分片斷就行了,片斷可以拼接到html對應的位置,構成一個有內容的完整的頁面。<img src="./assets/logo.png">這句被我注釋了,否則頁面會顯示這個圖片的。下面的<route-view/>部分是路由,根據用戶的url不同,會路由到不同的vue文件,進而展示不同的頁面內容。

四、index.js

項目里有不只一個index.js,一定看準了,我要講解的是router目錄下的index.js.

//這里的配置決定了App.vue里<router-view/>位置會展示什麼內容

export default new Router({

routes: [

{

path: '/', //當用戶訪問 http://localhost:8080/ 根目錄也就是默認目錄會被路由到HelloWorld組件,

//這個組件的所有內容會被在App.vue里<router-view/>顯示出來

name: 'HelloWorld',

component: HelloWorld

},

{//當用戶訪問 http://localhost:8080/ranktable 會顯示ranktable.vue內容

//ranktable.vue是我後加的

path: '/ranktable',

name: '/ranktable',

component: ranktable

}

]

})

五、HelloWorld.vue

最後看看這里有什麼

<template>

<div>

原來的內容被我刪除了,現在頁面顯示這句話。

</div>

</template>

<script>

</script>

vscode命令行執行npm run dev,看見下面說明成功了,將地址貼進瀏覽器

Compiled successfully in 983ms 15:43:26

I Your application is running here: http://localhost:8080

如果想要更復雜的功能,在helloworld.vue實現就行了,比如我要一個填表查詢功能,裡面改成

<template>

<div>

<group title="城市">

<selector placeholder="請選擇城市" v-model="demo01" title="" name="district" :options="list" @on-change="onChange1"></selector>

</group>

<group title="街道">

<selector placeholder="請選擇街道" v-model="demo03" title="" name="district" :options="list4" @on-change="onChange3" @click.native="onClickpz"></selector>

</group>

<group title="小區">

<selector placeholder="請選擇小區" v-model="demo02" title="" name="district" :options="list3" @on-change="onChange2" @click.native="onClickheyue"></selector>

</group>

<group title="日期">

<selector placeholder="請選擇日期" v-model="demo04" title="" name="district" :options="list5" @on-change="onChange4" @click.native="onClickdate"></selector>

</group>

<group title="統計類型">

<selector placeholder="請選擇統計類型" v-model="demo06" title="" name="district" :options="list6" @on-change="onChange6"></selector>

</group>

<div style="padding:15px;">

<x-button type="primary" @click.native="getValue('plainValueRef')">查詢</x-button>

</div>

</div>

</template>

<script>

import { Selector, Group, Cell, CellBox, XButton } from 'vux'

此處省略很多東西

</script>

這個例子有點復雜,需要下面<script>里實現很多內容,引入vux的一些組件,vux大家可以自行研究。效果是這樣的

③ 如何通俗地理解前端開發,它與後端開發有何聯系與不同

對於這個問題,我是這么理解的:前端開發面向用戶,後端開發面向機器。

前端開發理解和定位

如何理解和定位前端開發,最簡單的方法是從各大招聘網站上,查看各個公司對前端開發職位的崗位要求,就能清晰了解前端開發:前端開發主要負責圖形化類產品的研發、製作和升級,參與手機端和PC端的WEB產品、APP開發,根據產品需求開局兆發高質量前端頁面,積極探索前端開發技術的發展,優化用戶交互方式,提升用戶體驗。

前端開發主要技術

前端技術包括Javascript、CSS、XML、HTML5、JSON等,需要熟悉使用HTML和CSS進行頁面布局,掌握JQuery、Vue、React、Angular等框架或庫的技術原理和使用方法,前端開發也需要對不同設備及平台有一定了解,理解不同操作系統及瀏覽器的兼容性區別。

後端開發理解和定位

後端開發的工作職責主要包括參與業務系統需求分析、產品討論、系統架構設計、技術選型、產品研發、系統優化重構等。後端開發需要具有扎實的計算機科學功底、扎實的編程基礎,掌握常用的系統架構原理、搭建和優化方法,解決系統建設面臨的關鍵問題和技術難點。

後端開發主要技術

後端開發以設計開發高可用、高效率、高安全系統為目標,不局限於單一編程語言,主要技術包括分布式計算、中間件、資料庫、計算機網路、人工智慧、信息安全等方面技術,由於後端開發涉及面廣,後端開發人員最好具備一定的項目管理知識和經驗,有助於組織協調,推進項目開展。

前端開發與後端開發的聯系

如果將系統睜氏分為視圖-控制-模型三層,前端開發主要實現視圖層,後端開發實現控制和模型層。技術上都是桐早租運用分層、解藕、模塊化的思路提高開發集成效率、增強可維護行和可擴展性,近年來前端開發出現的Vue,React,Angular等框架大大推動了前端技術的發展,前端開發前途光明。

④ 前端Vue框架作用是什麼

簡潔高效方便的開發前端頁面,提升前端渲染性能,數據驅動,讓開發者將注意力集中在數據的渲染上而不是其他事情上

⑤ 微前端qiankun

微前端qiankun 使用,一些注意事項。附上 qiankun官網

主應用(vue)
1、安裝qiankun

2、修改 main.js

主應用到這就可以了,下面的是一些擴展載入微應用事項
3、router頁面配置載入微應用
修改主應用router.js

在About.vue文件中加入

4、如果在vue-admin模板中使用乾坤,需要注意的是:
<div id="container"></div> 不能寫在頁面中,只能寫在Appmain.vue 中,
路由需要配置重定向

判斷改變路由(這里可寫配置文件,偷懶就寫死了)

AppMain.vue,需要判斷顯示的是哪個微應用,改變其id顯示

微應用(vue)
1、在 src 目錄新增 public-path.js:

2、 main.js 修改。

3、打包配置修改(vue.config.js):

微應用(react)
1、在 src 目錄新增 public-path.js:

2、設置 history 模式路由的 base:

3、 index.js 修改

4、webpack 配置
安裝插件 @rescripts/cli。

根目錄新增 .rescriptsrc.js:

修改 package.json:

⑥ qiankun 微前端應用實踐與部署(四)

一般情況下,我們對應用進行配置打包,要對圖片字體等資源進行下面配置,使得資源路徑正常載入。但是,在微前端模式下,子應用打包部署後,往往會出現子應用 css 文件裡面引入資源路徑載入失敗的問題,下面就讓我們來探究一下。

👉 獨立應用下的 url-loader 配置:

因為 url-loader 的 options 項的屬性 publicPath 屬性默認是 '' ,表示相對路徑,即打包出來的資源引用 url 都會加上相對路徑尋找 static 靜態資源入口,比如:

所有應用編譯打包部署後,當主應用載入子應用,子應用載入自身的 css 文件樣式時,由於 其對應的 css 文件裡面的圖片 url 引用是相對路徑,會出現子應用的資源相對路徑拼接主應用 domain 的情況,即子應用的 ../../static/img/bg_header.790a94f4.png 會在主應用的 domain 下進行資源的尋找,導致載入失敗 404 的情況。

如果項目有用到第三方庫,比如 element-ui ,那麼就更有必要進行處理了。因為 element-ui 的字體圖標是在 css 裡面引入的,還有相關背景圖片的引入也是在 css 里,所以需要配置 webpack 的 url-loader ,生產模式情況下直接指定資源前綴,使之成為絕對路徑。

這樣配置後,打包出來的 css 樣式文件會變成:

資源是絕對路徑,就不會出現上面子應用資源載入失敗的情況。

但是,這種前端配置文件寫死路徑的做法靈活性並不好,比如不能做到編譯一次,任意部署,因為路徑寫死,所以如果需要部署到其他伺服器的話,就需要重新編譯了。

接下來,講的是實現靈活部署的方案。

我們在只編譯打包一次前端應用的前提下,為了實現靈活部署,需要藉助 nginx 來實現。

下面以 vue-cli 3 的配置為例,與 vue-cli 2 只是寫法上的區別,其他都一樣。

假設主應用部署地址是 192.168.2.192 ,子應用的部署地址是 192.168.2.192:7102 。

打包編譯部署後,子應用的 css 文件裡面的圖片資源引用 url 如下:

主應用載入子應用的時候,子應用的資源拼接主應用 domian 後,子應用的 css 文件裡面的圖片資源載入路徑 url 就會變成:

此時的關鍵就是要訪問到子應用的資源,而不是去主應用資源目錄去找。

所以我們採用 nginx 路徑代理轉發埠的方案,當應用訪問 192.168.2.192/live 這個路徑時,經過 nginx 進行路徑代理轉發配置,轉發到子應用埠。

配置 nginx 代理規則:

此時真正訪問的資源路徑(子應用資源路徑)是:

👋 至此,通過修改配置 url-loader 的 publicPath 以及配置 nginx 的路徑代理轉發,就可以實現編譯打包一次,到處部署的目的。

⑦ qianKun + VUE 實現微前端架構 (基於vue2實現)

創建兩個項目作為實現demo,一個為主應用,一個為子應用

3.配置函數文件 microAppSetting

4.微應用出口文件 index.js

5.在App.vue內配置微應用容器及跳轉菜單

6.在main.js文件內引入微應用出口文件 index.js

7.運行後展示

8.在配置完子應用後的主應用展示
點擊子應用菜單

1.修改子應用路由文件內路由實例屬性: base 為 "/child"

2.在main.js文件內導出生命周期鉤子

3.配置Webpack、跨域與埠號
在vue.config.js內添加:

4.運行後展示

package.json

⑧ 微前端quankun Vue應用 action+Vuex通信方式的實現

action + Vuex 通信主要是使用官方的 action 進行通信,之後再將值更新到 vuex 中

1、初始化 action

創建 src -> shared -> actions.js

2、在 Vue 組件中使用

1、把主應用中的初始化的action映射到微應用中

創建 src -> shared -> actions.js

2、在mounted的生命周期里注入actions實例

main.js

3、在 Vue 組件中使用

這樣就實現 action + Vuex 的通信方式。

主要還是開篇這句話:
action + Vuex 通信主要是使用官方的 action 進行通信,之後再將值更新到 vuex 中

主要參考文章:
乾坤官網通信API
微前端qiankun Vue應用間通信的思考
qiankun的簡單使用和通信