在使用Vue開發(fā)出我想要的web小程序后,我萌生了移植到手機端的念頭。Weex是阿里開源的一個使用Vue開發(fā)跨平臺應用的工具。其概念大致等同于React Native,主打一次開發(fā)(Vue),全平臺支持(Android/iOS/Web)。但是在短暫研究了它的編譯、部署后,感覺需要的學習曲線也很陡峭,不僅涉及到多平臺的編譯、打包,還有各種新的語法和標簽,而且實質(zhì)上也繞不開native的學習,所以就先擱置一邊了。
后來,非常巧合地發(fā)現(xiàn)了美團的一個開源項目mpvue——一個用來將Vue程序編譯為微信小程序的開源工具。"hmm……小程序,不也是跨平臺的嘛"我這樣想著,就開始著手把之前Vue實現(xiàn)的app轉到微信小程序上。后來在簡單試用mpvue和wepy(騰訊出的Vue轉小程序工具)后,最終選用了wepy。技術上和功能上,mpvue要更高級和方便,wepy則需要更多的小程序語法,可是mpvue太新了(不到半年),文檔匱乏、社區(qū)太小,遇上問題將很難調(diào)試。
小程序開發(fā)環(huán)境
進入正題,首先你需要一個小程序開發(fā)者賬號。這個賬號和個人公眾號的賬號是平級的,所以我必須用一個新郵箱申請注冊。(PS 每一個賬號只能開發(fā)一個小程序,每一個個人只能擁有5個小程序。)

填寫基本信息后,會得到一個appid,這個用于本地程序的開發(fā)和部署。小程序的開發(fā)需要使用騰訊專門提供的跨平臺開發(fā)工具(IDE),這個可以在官網(wǎng)下載。這個IDE除了可以開發(fā)小程序,還可以用于預覽在微信上看到的網(wǎng)頁。

打開項目時,直接選擇使用wepy-cli創(chuàng)建的項目目錄即可(有關wepy項目的創(chuàng)建可參見其官網(wǎng))。wepy項目在編譯后會輸出至dist目錄,小程序IDE也會自動加載這個目錄作為小程序源代碼。
至此,就完成了小程序開發(fā)環(huán)境設置,接下來只需要在項目目錄運行npm run dev或yarn dev即可實現(xiàn)程序熱更新了。
小程序語法
小程序并不能算是純粹的web應用,它有自己獨立的一套文件、語法系統(tǒng)。例如它的網(wǎng)頁文件不是html,css和js;相對應的是wxml、wxss和wxs(wx即微信)。不過js也是支持,和在原生瀏覽器上運行應該無差異,具體可以參考其文檔。
使用這些新的語法系統(tǒng),有非常多的局限性,不過也可以想象,小程序是運行在微信里的,語法嚴格和簡單,會讓程序運行更加可控;畢竟復雜的程序都會有其自己的原聲版本。好在是對于小程序的這些限制/功能,官方給出了詳盡的文檔和解釋,所以只要適當?shù)睦@開它們就行了。
另外,這套語言有非常多Vue的影子,相信這也是wepy和mpvue得以誕生的原因之一。以wepy為例,它的一個重要的作用,就是重新允許開發(fā)者添加npm引用。wepy在編譯成最終的小程序源碼時,會把用到的npm從龐大的node_modules目錄中提取出用到的部分,然后打包成最小的js文件。這一點也是wepy最吸引我的地方,因為這樣一來,npm里面的開源類庫就可以方便調(diào)用了。
除了在IDE中可以方便的調(diào)試(深度定制化的Chrome DevTool),還可以通過點擊“預覽”按鈕在手機上打開。對于開發(fā)版小程序,手機上還可以使用單獨的兩個功能——“調(diào)試工具”和“性能監(jiān)測”來輔助真機調(diào)試。又因為我們開啟了熱更新,IDE中的UI也會實時更新,在這個IDE上的開發(fā)體驗可以說是非常流暢。
小程序發(fā)布
開發(fā)就說道這里吧,其中細節(jié)上遇到很多坑,但一點一點也算是趟過來了,最終獲得了一個可工作的小程序。下面就是發(fā)布環(huán)節(jié)了。
發(fā)布的第一個條件是——一個圖標。
沒有辦法,只有使用自己蹩腳的PS,勉強做了一個圖標。

(右邊的四個星星是南十字星,左下角是NZ代表新西蘭。)
好吧,我承認很丑,可如果你見到第一版的程序本身,你才會明白什么是真丑。
(太需要一個會美工的朋友了有木有。)
寫到這里,覺得UI確實有點內(nèi)個……然后又花了一晚上適配了WEUI——微信團隊推出的微信UI樣式庫,用于保持網(wǎng)頁/小程序界面的一致性。類似的UI庫還有很多,不禁感嘆,現(xiàn)在這個念頭自己寫個程序真是太簡單了。
不論如何,必要條件都搞定了。下面首先是上傳代碼,直接在IDE里的工具欄中點擊“上傳”即可。上傳可以看成是git里面的commit,需要輸入一些message來標記。代碼上傳后,登錄網(wǎng)頁版,在版本管理里就可以看到剛才提交的版本了。
小程序一共有三個版本。開發(fā)版本,對應最后一次上傳成功的代碼,可以將其中一個版本設為“體驗版”,如何體驗還沒研究;也可以提交審核。審核版本,會列出當前正在審核的版本,可以選擇撤銷審核。審核成功后,即可將該版本提交為“線上版本”,也就是生產(chǎn)環(huán)境用戶看到的版本。
個人體驗,初次審核速度不到一天左右,第二次審核不到2小時,不知道是快還是慢。因為畢竟只是一個非常小的小程序而已。
總結
這次嘗試名為開發(fā)小程序,實際上用到的幾乎全是Web開發(fā)需要的功能,小程序能力上的特長并沒有發(fā)揮出來。拋開微信巨大的流量引入不說,從開發(fā)者的角度來看,小程序最大的特性實際上是對系統(tǒng)API的封裝。通過對這些API,開發(fā)者可以非常方便的去調(diào)用諸如攝像頭、聲音、GPS、傳感器、藍牙等等硬件設施。只要程序?qū)τ谛阅芤蟛桓?,即所謂“小程序”,那么開發(fā)一款跨平臺的“手機App”就不在是那么困難的事了。
