亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

微信小程序 devtool隱藏的秘密

2019-11-19 17:50:21
字體:
來源:轉載
供稿:網友

微信小程序 devtool

筆者參與的小程序項目開發也進入尾聲了,坑也踩得七七八八,對于哪些沒有涵蓋和深入使用的功能筆者就不班門弄斧了。

前幾篇文章講了那么多細節也好,策略也好,都是應用層面的東西。自微信小程序公布以來就有先行者不斷的探索小程序背后的運行機制。小程序的開發語法和API與前端工程師熟悉的html/js/css非常相似,所以會令很多人疑惑小程序與普通的HTML5應用到底有什么區別。這篇文章其實將小程序的基本運行機制剖析的差不多了,簡單概括就是:

  • 大部分內容會轉化為常規的html/css/js,并使用webview渲染;
  • 部分組件調用native實現功能。

既然已經有先行者得出了結論,為啥還要寫這篇文章呢?當然是為了湊齊七篇啦,哈哈哈...

開玩笑!這篇文章的目的不是重復別人的結論,而是將筆者研究小程序開發工具源碼的一些心得和結論記錄下來,以方便大家后續更深入的探索。

看看devtool的源碼有什么

第一步是找到小程序devtool的源碼,以mac系統為例,源碼的打開方式如下圖:

其他的文件不用理會,我們要研究的主要代碼在Content/Resources/app.nw/dist目錄下,這個目錄包括devtool的功能代碼以及對小程序進行執行、編譯、打包、上傳等功能的代碼。當然,這些代碼都是經過混淆的,讀起來還挺費勁(攤手~

需要著重注意的是Content/Resources/app.nw/dist/weapp目錄,以及commit和trans兩個子目錄:

從文件的命名上大致可以猜到每個文件對應的功能:

  • trans目錄下的文件負責將小程序源碼進行一系列的轉換,最終被轉換為瀏覽器可識別的html、css以及js;
  • commit目錄下的文件負責執行小程序的構建、打包、上傳等功能。

既然我們知道小程序會進行構建打包流程,想得知小程序運行機制最好的辦法就是研究構建完畢之后的代碼。有了這個目標之后,下一步就是查看devtool的日志獲取小程序構建之后的代碼存放位置。

找到日志文件

Content/Resources/app.nw/dist/common/log/log.js是負責管理devtool日志功能的文件,其中有這樣一段代碼:

const a = require('fs'),  b = require('log'),  c = require('path'),  d = require('../../config/dirConfig.js'),  e = d.WeappLog;

其中e便是日志文件的存放目錄,然后我們追溯到config/dirConfig.js中發現目錄路徑是由nw.App.getDataPath()生成的,這個函數是node-webkit提供的API,生成結果的規則在不同的操作系統下有差異,可惜筆者并沒有找到相關的說明(沮喪)。

但是此次代碼的探索并非沒有收獲,起碼我們知道了日志文件存放的目錄名為“WeappLog”,我們可以使用強大的命令行從硬盤中搜索此目錄:

mdfind WeappLog

大家可以參考這篇文章了解mdfind命令的用法

從輸出結果可以得知日志文件在Mac系統的存放目錄為/Users/<用戶名>/Library/Application Support/微信web開發者工具/WeappLog。進入目錄后就會發現很多以.log為后綴的日志文件:

上傳小程序的流程打包后的小程序在哪里

找到日志文件后便可以從devtool的執行日志中獲取小程序被構建后的代碼存放位置。當然,第一步是要講小程序進行構建,操作方法是在小程序開發工具的“項目”菜單”中點擊”預覽“:

成功后再日志文件中會出現這么一行記錄:

[Wed Jan 18 2017 15:20:24 GMT+0800 (CST)] INFO pack.js create /Users/<用戶名>/Library/Application Support/微信web開發者工具/Weappdest/1484724024071.wx success!

/Users/<用戶名>/Library/Application Support/微信web開發者工具/Weappdest/1484724024071.wx就是構建完成的小程序代碼!趕緊去看看!

興致勃勃的找到/Users/<用戶名>/Library/Application Support/微信web開發者工具/Weappdest/目錄,然后發現:空空如也!

看來微信團隊還是很謹慎的,在將小程序源碼上傳之后便會刪除構建產出的文件。但是這點小伎倆難不倒程序員!任何行為都是程序執行的,我們直接修改相關的程序代碼就可以了嘛!

做點小手腳,看看打包后的代碼

Content/Resources/app.nw/dist/weapp/commit/upload.js中有一段這樣的代碼:

const a = require('fs'),  j = require('rmdir');  //省略無關代碼 _exports.uploadForTest = (l, m, n) => {  //省略無關代碼  c(l, {   noCompile: !0  }, (s, t) => {   if (s) return void n(s.toString());   let u = d.join(k, `${+new Date}.wx`);   b(t, u, (v, w) => {    j(t, (A, B, C) => {});    //省略無關代碼    if (y > q) return a.unlink(u, () => {}), void n(`代碼包大小為 ${y} kb,超出限制 ${y-q} kb,請刪除文件后重試`);    //省略無關代碼})

上述代碼省略了一些與我們當前討論內容無關的代碼,感興趣的讀者可以自行研究。

上述代碼有兩個刪除文件的行為:

rmdir:刪除構建完成但是并未打包的代碼目錄;

fs.unlink:刪除打包完成的文件。

將執行刪除的代碼注釋以后,再通過小程序開發者工具進行預覽上傳操作后,在上文中我們得到的目錄中便會留下構建以及打包后的文件了。如下:

其中以.wx為后綴的文件是經過打包后的文件,也就是上傳到微信服務器的文件。其同名的目錄文件夾是構建完成且打包之前的源文件。

config.js為例,構建后的代碼如下:

'use strict';Object.defineProperty(exports, '__esModule', { value: true});exports.default = { basePath: 'https://djtest.cn', fileBasePath: 'https://djtest.cn'};

其實僅僅將ES6的語法轉譯成了ES5語法。其余的wxml、wxss以及js文件基本也是這樣的狀態,所以可以推斷源碼上傳至微信服務器后會執行真正的構建動作,開發工具只執行了一些簡單地構建行為。

雖然筆者并未從這份代碼中得到全部的真相,但希望這篇文章能夠給后續的探索者提供一些微薄的幫助。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人在线观看视频网站| 欧美大片免费观看| 日本精品久久中文字幕佐佐木| 亚洲欧美日韩精品| 日韩精品电影网| 日韩美女在线观看| 国产噜噜噜噜久久久久久久久| 亚洲aa在线观看| 亚洲国产欧美一区| 欧美性一区二区三区| 91热精品视频| 亚洲视频999| 丝袜情趣国产精品| 成人乱色短篇合集| 欧美成在线视频| 中文字幕日韩专区| 国产精品嫩草影院一区二区| 亚洲一区二区三区毛片| 成人性教育视频在线观看| 欧美日韩国产精品专区| 91精品国产色综合| 亚洲欧美一区二区激情| 中文字幕av一区中文字幕天堂| 91精品国产777在线观看| 91精品国产成人www| 在线观看精品自拍私拍| 久久中文字幕在线| 欧美精品18videosex性欧美| 亚洲国产精品小视频| 久久香蕉精品香蕉| 欧美激情精品久久久久久久变态| 亚洲精品综合久久中文字幕| 亚洲自拍中文字幕| 黄色成人av在线| 色婷婷综合久久久久| 91精品啪在线观看麻豆免费| 亚洲成年人在线| 国产精品女人网站| 97香蕉超级碰碰久久免费软件| 欧美精品在线网站| 日韩国产激情在线| 亚洲成色www8888| 91精品久久久久久久久久另类| 亚洲欧美成人一区二区在线电影| 91中文精品字幕在线视频| 欧美在线一区二区三区四| 亚洲精品日韩在线| 97在线日本国产| 亚洲一区二区三区在线免费观看| 播播国产欧美激情| 亚洲欧美另类国产| 欧美国产精品人人做人人爱| 欧美巨猛xxxx猛交黑人97人| 国产综合在线观看视频| 久久在线视频在线| 欧美在线性视频| 国产精品青青在线观看爽香蕉| 国产一区二区久久精品| 伊人青青综合网站| 久久久精品在线观看| 91色视频在线导航| 亚洲福利视频网站| 欧美性猛交xxxx偷拍洗澡| 国产成人精品久久久| 3344国产精品免费看| 国产精品影片在线观看| 日韩高清电影好看的电视剧电影| 国产精品女主播| 国产v综合ⅴ日韩v欧美大片| 91av网站在线播放| 亚洲女同精品视频| 亚洲视频第一页| 2019亚洲日韩新视频| 欧美专区第一页| 亚洲欧美在线x视频| 久久福利视频网| 日韩福利视频在线观看| 国产深夜精品福利| 亚洲男人av在线| 亚洲国产女人aaa毛片在线| 欧美激情第6页| 国产精欧美一区二区三区| 久久精品国产一区二区电影| 亚洲精品成人免费| 136fldh精品导航福利| 国产精品www色诱视频| 在线激情影院一区| 国产精品成人播放| 国产精品自拍网| 欧美一级片在线播放| 国产成人综合av| 91精品视频免费观看| 亚洲视频在线看| 欧美丝袜美女中出在线| 久久亚洲影音av资源网| 久久精品电影网站| 国产精品久久不能| 欧美xxxx14xxxxx性爽| 欧美激情xxxx| 亚洲国产精品电影| 久久色精品视频| 久久精品成人欧美大片古装| 一本色道久久88亚洲综合88| 国产mv久久久| 国产v综合ⅴ日韩v欧美大片| 91精品久久久久久久久青青| 91在线观看欧美日韩| 欧美精品久久久久久久免费观看| 欧美裸体视频网站| 亚洲一区二区三区四区在线播放| 91麻豆国产语对白在线观看| 日韩一区二区久久久| 国产精品第一区| 久久在精品线影院精品国产| 亚洲福利视频久久| 国产日韩欧美在线视频观看| 精品无人区太爽高潮在线播放| 欧美激情一二三| 中文字幕国产亚洲| 亚洲欧美在线播放| 97在线视频观看| 亚洲va国产va天堂va久久| 国产91精品久久久久久久| 青青草精品毛片| 一区二区福利视频| 成人黄色网免费| 欧美怡红院视频一区二区三区| 久久久999精品免费| 国产精品无码专区在线观看| 91精品国产高清久久久久久91| 在线视频欧美日韩精品| 丝袜情趣国产精品| 亚洲japanese制服美女| 一区二区日韩精品| 欧美在线性爱视频| 国产精品久久久av| 亚洲免费小视频| 在线视频免费一区二区| 久久精品视频亚洲| 久久91亚洲精品中文字幕奶水| 国产精品亚洲一区二区三区| 亚洲欧洲在线播放| 精品久久久久久久久久久久久久| 国产精品久久99久久| 日韩美女在线播放| 亚洲第一偷拍网| 欧美精品手机在线| 北条麻妃一区二区三区中文字幕| 国产精品网站大全| 欧美专区在线视频| 日韩av电影在线免费播放| 国产精品美女久久久久久免费| 欧美日韩国产中文字幕| 成人妇女免费播放久久久| 亚洲精品久久久久久下一站| 最新国产成人av网站网址麻豆| 午夜精品久久久99热福利| 久久精品视频播放| 国产精品永久免费| 久久精品一偷一偷国产| 一区二区三区美女xx视频| 久久久久久久久爱| 国产精品亚洲аv天堂网| 亚洲影院色在线观看免费|