前文 說到我開發(fā)了一個簡單的小程序叫做 車標速查(代碼以及二維碼詳見 這里),本文簡單講講如何將這個小程序轉(zhuǎn)為 mpvue 開發(fā)(最終 成果 )
mpvue 官網(wǎng)的 文檔 真的是非常簡單,不,應(yīng)該說是簡潔,因為依托 Vue,所以很多語法不需要贅述,直接去看 Vue 的文檔就好了。mpvue 這個名字真的是不忍吐槽,起名也太不上心了吧 ... 反正我個人覺得不好聽
mpvue 的入門非常簡單,可以看這個 quickstart。生成的模版目錄結(jié)構(gòu)和 Vue 開發(fā)很像,但是有區(qū)別,為了使之構(gòu)建出符合小程序項目結(jié)構(gòu)的代碼格式: json/wxml/wxss/js 文件。src 是開發(fā)目錄,dist 是最后 build 的目錄,也就是小程序的代碼
簡單看一下 src 的代碼結(jié)構(gòu):
復(fù)制代碼├── App.vue ├── data │ └── data.js ├── main.js ├── pages │ ├── about │ │ ├── index.vue │ │ └── main.js │ ├── detail │ │ ├── index.vue │ │ └── main.js │ └── index │ ├── index.vue │ └── main.js └── utils └── index.js
App.vue 最后會被編譯成 app.js/app.wxss,一些全局相關(guān)的樣式和鉤子函數(shù)會被放在這里(比如說 onLaunch,但是在 mpvue 里我們可以用 created 代替)。main.js 會被編譯成 app.json,一些全局相關(guān)的配置放在這里(比如頁面入口,tabbars 等)
pages 目錄即為每個頁面,以 index 目錄為例,index.vue 會被編譯成 main.js/main.wxml/main.wxss,而 main.js 可以放置針對單個頁面的配置,最后會被編譯成 main.json(如果沒有填入配置項,則不會生成該文件)
然后來簡單過下開發(fā)過程中踩的一些坑:
總的來說,我從入門 mpvue 到用其改寫這個小程序,也就不過一天時間,由此可見 mpvue 上手真的非??欤撬o我的總體感覺是有點雞肋,一方面可能是我這個項目有點簡單(不需要用到 Vuex 以及組件化),另一方面可能還不是很了解 mpvue
官網(wǎng)概括的它的主要能力:
我覺得目前主要的亮點在于 Vuex 的可引入以及組件化開發(fā),但是越來越覺得隨著原生小程序開發(fā)的改善,這些功能都會被補充進去。所以,最大的賣點可能還是在于 多端統(tǒng)一
我覺得有點雞肋的另一個重要原因是,使用 mpvue 開發(fā)并不能完全忽略小程序的 API 或者組件,比如這個小程序,還是要用 navigator 組件以及 scroll-view 組件去實現(xiàn)一些功能(當然隨著 mpvue 生態(tài)的發(fā)展,完全有可能出現(xiàn) navigator/scroll-view 的 mpvue 組件,但是這樣造輪子是否值得?),而且可能還有其他一些 API。而類比 jQuery 和 js,jQuery 完全不用去考慮原生的 dom 操作方式,從而更加 “傻瓜式”。mpvue 的開發(fā)模式注定不會是這樣的結(jié)局(因為并不是從小程序底層去開發(fā))
另外一點,用 mpvue 開發(fā),增加了一層 vue->小程序 編譯環(huán)節(jié),所以 reload 的速度應(yīng)該會比原生開發(fā)慢一點
魯小夫 在 如何看待美團開源的 mpvue ? 這個問題下的答案非常值得思考:
不過我們也該思考一下,為什么大家對微信小程序自帶的機制有這么多意見,為什么大家對 vue 這么認同,為什么多端兼容這個事情這么重要,為什么微信小程序沒有擁抱開源,為什么微信小程序的技術(shù)棧沒能做到標準化通用化。為了兼容微信小程序,前端工程師做了這么多工作,弄了那么多框架,到底得到的是什么。
以前看到過一句話,大概意思是,微信小程序有太多滿分的開源框架可以借鑒,最后卻造了個負分的輪子。
all in all,我的看法是,如果你剛好熟悉 Vue 或者需要多端統(tǒng)一開發(fā),那么 mpvue 或許是個選擇,如果你只是從頭開始開發(fā)一個小程序,原生開發(fā)也未嘗不可。說到底,一系列小程序框架的出現(xiàn)無非是原生開發(fā)體驗太差,但是我相信,以微信的能力,假以時日能夠把小程序原生開發(fā)的體驗做好。
工作日 8:30-12:00 14:30-18:00
周六及部分節(jié)假日提供值班服務(wù)