在上一篇《微信小程序「官方示例代碼」淺析【上】》中辈讶,我們只是簡(jiǎn)單的羅列了一下代碼,這一篇沪斟,讓我們來(lái)玩點(diǎn)刺激的——就是看看IDE的代碼,了解它是怎么運(yùn)行的.http://www.helloxcx.com/article-8.php
還好微信的開(kāi)發(fā)團(tuán)隊(duì)在軟件工程的實(shí)踐還有待提高,我們才有機(jī)會(huì)可以深入了解他們的代碼——真想建議他們看看Growth的第二部分,構(gòu)建系統(tǒng)。
首先你需要有下面的工具 .hello 小程序
Mac電腦
微信web開(kāi)發(fā)者工具.app
WebStorm / 其他編程器 或 IDE,最好可以支持重命名
首先墓阀,我們需要右鍵微信web開(kāi)發(fā)者工具.app,然后顯示包的內(nèi)容拓轻,在 Contents/Resources/app.nw下面的內(nèi)容即是我們的代碼斯撮,拷貝出來(lái)啦:
簡(jiǎn)單的說(shuō)明一下:
app/ 目錄下放置了app的代碼
modified_modules/ 即一些修改后的模塊
node_modules/ 地球人都知道
package.json 呵呵,你一定是知道的扶叉,配置了NW相關(guān)的內(nèi)容
在modified_modules目錄下有兩個(gè)子模塊:
modified_modules目錄下有兩個(gè)子模塊:
anyproxy勿锅,從名字就可以看起來(lái)這是一個(gè)代理模塊
weinre帕膜,遠(yuǎn)程調(diào)試工具
我們已經(jīng)知道了這是一個(gè)NodeWebkit封裝的Web應(yīng)用了。
在package.json中的"main": "app/html/index.html",溢十,即定義了這個(gè)APP的入口是這個(gè)index.html垮刹,而不是別的文件。
很順利的我們看到了他們調(diào)用的文件了:
這里面有一個(gè)init方法张弛,看來(lái)他就是NodeWebkit相關(guān)的入口了荒典。用WebStorm的shift + f6RENAME 這些變量好十幾次,終于看到了下面的代碼了:
直接跳轉(zhuǎn)到ContainController.js吞鸭,跳轉(zhuǎn)到render方法寺董,找到了這個(gè):
果然Main里面就是大入口了
對(duì)應(yīng)的就是下面這個(gè)界面了:
edit 就是編輯器及其相關(guān)的事項(xiàng)
detail就是項(xiàng)目的配置
WeAPP運(yùn)行機(jī)制
慢慢的就探索到了打包,其運(yùn)行時(shí)的過(guò)程刻剥。由于我并沒(méi)有拿到內(nèi)測(cè)資格遮咖,所以我只好邊看邊猜測(cè)一下。
在之前的文章中造虏,我們提到了兩點(diǎn)很有意思的東西:wxml和wxss御吞,這兩個(gè)文件會(huì)被分別轉(zhuǎn)換,即wxml -> html漓藕,wxss -> css陶珠。對(duì)應(yīng)的有幾個(gè)不同的transform:
transWxmlToJs
transWxssToCss
transConfigToPf
transWxmlToHtml
transManager
這里的PF指代的是PageFrame的意思,pageFrame有一個(gè)對(duì)應(yīng)的模板文件:
這種風(fēng)格一看就是生成字符串Replace的享钞,然后他們寫(xiě)了一個(gè)名為wcc以及一個(gè)名為wcsc的工具揍诽。
wcc用于轉(zhuǎn)轉(zhuǎn)wxml中的自定義tag為virtual_dom
wcsc,我觀察到的現(xiàn)象是它為轉(zhuǎn)換wxss為css
這樣的話嫩与,我們就可以理解為微信小應(yīng)用有點(diǎn)類(lèi)似于 Virtual Dom + WebView,畢竟上面有個(gè)WAWebView文件 交排,還有一個(gè)webviewSDK文件 划滋。
當(dāng)然無(wú)論是React + WebView,或者Vue + WebView都不重要埃篓,現(xiàn)在有了 WA + WebView了处坪,哈哈。
WeApp采用的是如下圖所示的提交方式架专,所以:
你在本地寫(xiě)的WeApp都會(huì)被提交到微信服務(wù)器同窘,然后打包,上傳到服務(wù)器部脚,交給CDN——畢竟為了分發(fā)想邦。
上傳的過(guò)程大致如下:
APP會(huì)被打包成以日期命名 + .wx文件
IDE會(huì)檢測(cè)包的大小,并提示:代碼包大小為 xx kb委刘,超過(guò)限制 xx kb丧没,請(qǐng)刪除文件后重試鹰椒。這個(gè)xx好像是1024,所以APP的大小是1M呕童。
APP將會(huì)上傳到 https://servicewechat.com/wxa-dev/commitsource/?appid=xx&user-version=&user-desc=xx