uni-app就是基于vue開(kāi)發(fā)的框架,如果你會(huì)vue的話,入門應(yīng)該是沒(méi)啥問(wèn)題,如果上手去做項(xiàng)目的話,還是有些難度的。具體哪些難度我們得搞清楚uni-app到底是什么。
uni-app是一個(gè)使用Vue.js開(kāi)發(fā)所有前端應(yīng)用的框架,開(kāi)發(fā)者編寫(xiě)一套代碼,可發(fā)布到iOS、Android、H5、以及各種小程序(微信/支付寶/百度/頭條/QQ/釘釘)等多個(gè)平臺(tái)
這是官網(wǎng)介紹的原話,咋一聽(tīng)很厲害的樣子。發(fā)布到多個(gè)平臺(tái)只需要一套代碼,這樣的話效率高,成本又低。那為何大公司沒(méi)有采用uni-app進(jìn)行開(kāi)發(fā)呢?
這就很像是java虛擬機(jī)了,不過(guò)java虛擬機(jī)是程序運(yùn)行時(shí)工作,而uni-app是編譯時(shí)工作。
可以這樣理解,
在編譯時(shí)解決平臺(tái)問(wèn)題,這是目前很多跨平臺(tái)框架的首選解決方案,即保證效率又方便開(kāi)發(fā)者。
但這種方案也有缺點(diǎn),如果平臺(tái)變動(dòng)或更新,那么有可能導(dǎo)致你app某些功能無(wú)法使用,必須等著uni-app維護(hù)升級(jí)。
這就是uni-app的跨平臺(tái)原理,現(xiàn)階段的跨平臺(tái)方案沒(méi)有完美的,都是有利有弊。
是的,uni-app開(kāi)發(fā)頁(yè)面用的就是Vue組件
上圖代碼是uni-app登陸模版項(xiàng)目里面的,可以看出來(lái),用的就是Vue的template模版開(kāi)發(fā)。
一般不涉及到平臺(tái)性的組件都是使用Vue開(kāi)發(fā)的,所以如果你項(xiàng)目對(duì)跨平臺(tái)要求不高,而且會(huì)Vue的話可以直接上手開(kāi)發(fā)uni-app
比如彈窗,我們用Vue的話一般在template寫(xiě)個(gè)dialog,而uni-app可以直接通過(guò)uni.showModal實(shí)現(xiàn)彈窗。當(dāng)然這個(gè)例子不太嚴(yán)謹(jǐn),Vue也能封裝一個(gè)這樣實(shí)現(xiàn)。這里主要講的是跨平臺(tái),使用uni-app提供的組件基本不用擔(dān)心平臺(tái)適配問(wèn)題。
為什么會(huì)Vue上手uni-app仍然有難度
這里說(shuō)的難度不是指寫(xiě)代碼的難度,代碼都是用Vue寫(xiě)的不存在啥難度。
uni-app代碼編譯打包后,移動(dòng)端基本是運(yùn)行在安卓的webview或ios的WKWebView。但是安卓或ios平臺(tái)為了效率或者安全性,不會(huì)去支持H5的一些危險(xiǎn)特性或者功能,當(dāng)然H5是安全的們這里的危險(xiǎn)只是安卓和ios認(rèn)為的。
比如ios的WKWebview,對(duì)H5一些新的css不支持或者不會(huì)太早的更新適配。
如果你不了解移動(dòng)端webview的差異性,那么很容易踩雷,而且這些錯(cuò)誤都是無(wú)法通過(guò)debug發(fā)現(xiàn)的。
有些適配工作是uni-app無(wú)法通過(guò)編譯完成的,這就是需要開(kāi)發(fā)者去實(shí)現(xiàn)了。
比如開(kāi)發(fā)中,div、ul、li等得改為view,微信的wxcomponet不支持H5等等。
這里就增加了很多的開(kāi)發(fā)成本,很多不支持跨平臺(tái)的vue組件用不了。
總結(jié)
如果你會(huì)Vue,使用uni-app開(kāi)發(fā)的話,上手是比較簡(jiǎn)單的,但是如果項(xiàng)目涉及到跨平臺(tái)的話,就得斟酌下了,會(huì)有很多坑,一旦影響到業(yè)務(wù)功能的實(shí)現(xiàn),就得不償失了。
如果你項(xiàng)目不涉及到移動(dòng)端,就只在web和小程序上運(yùn)行的話,可以使用uni-app開(kāi)發(fā)。
都說(shuō)后端造語(yǔ)言,移動(dòng)端造系統(tǒng),web端造框架。但在這個(gè)前端大融合的時(shí)代,系統(tǒng)框架已分的沒(méi)那么清楚。