|
導讀微信小程序,簡稱小程序,英文名Mini Program,是一種不需要下載安裝即可使用的應用,它實現了應用“觸手可及”的夢想,用戶掃一掃或搜一下即可打開應用。小程序是一種不用下載就能使用的應用,也是一... 微信小程序,簡稱小程序,英文名Mini Program,是一種不需要下載安裝即可使用的應用,它實現了應用“觸手可及”的夢想,用戶掃一掃或搜一下即可打開應用。小程序是一種不用下載就能使用的應用,也是一項門檻非常高的創新,經過將近兩年的發展,已經構造了新的小程序開發環境和開發者生態。 這篇文章主要介紹了微信小程序 devtool隱藏的秘密的相關資料,需要的朋友可以參考下微信小程序 devtool 筆者參與的小程序項目開發也進入尾聲了,坑也踩得七七八八,對于哪些沒有涵蓋和深入使用的功能筆者就不班門弄斧了。 前幾篇文章講了那么多細節也好,策略也好,都是應用層面的東西。自微信小程序公布以來就有先行者不斷的探索小程序背后的運行機制。小程序的開發語法和API與前端工程師熟悉的html/js/css非常相似,所以會令很多人疑惑小程序與普通的HTML5應用到底有什么區別。這篇文章其實將小程序的基本運行機制剖析的差不多了,簡單概括就是:
既然已經有先行者得出了結論,為啥還要寫這篇文章呢?當然是為了湊齊七篇啦,哈哈哈... 開玩笑!這篇文章的目的不是重復別人的結論,而是將筆者研究小程序開發工具源碼的一些心得和結論記錄下來,以方便大家后續更深入的探索。 看看devtool的源碼有什么 第一步是找到小程序devtool的源碼,以mac系統為例,源碼的打開方式如下圖:
其他的文件不用理會,我們要研究的主要代碼在 需要著重注意的是
從文件的命名上大致可以猜到每個文件對應的功能:
既然我們知道小程序會進行構建打包流程,想得知小程序運行機制最好的辦法就是研究構建完畢之后的代碼。有了這個目標之后,下一步就是查看devtool的日志獲取小程序構建之后的代碼存放位置。 找到日志文件
const a = require('fs'),
b = require('log'),
c = require('path'),
d = require('../../config/dirConfig.js'),
e = d.WeappLog;其中 但是此次代碼的探索并非沒有收獲,起碼我們知道了日志文件存放的目錄名為“WeappLog”,我們可以使用強大的命令行從硬盤中搜索此目錄: mdfind WeappLog
從輸出結果可以得知日志文件在Mac系統的存放目錄為
上傳小程序的流程打包后的小程序在哪里 找到日志文件后便可以從devtool的執行日志中獲取小程序被構建后的代碼存放位置。當然,第一步是要講小程序進行構建,操作方法是在小程序開發工具的“項目”菜單”中點擊”預覽“:
成功后再日志文件中會出現這么一行記錄: [Wed Jan 18 2017 15:20:24 GMT+0800 (CST)] INFO pack.js create /Users/ <用戶名>/Library/Application Support/微信web開發者工具/Weappdest/1484724024071.wx success!
興致勃勃的找到 看來微信團隊還是很謹慎的,在將小程序源碼上傳之后便會刪除構建產出的文件。但是這點小伎倆難不倒程序員!任何行為都是程序執行的,我們直接修改相關的程序代碼就可以了嘛! 做點小手腳,看看打包后的代碼 在 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,請刪除文件后重試`);
//省略無關代碼
})
上述代碼有兩個刪除文件的行為:
將執行刪除的代碼注釋以后,再通過小程序開發者工具進行預覽上傳操作后,在上文中我們得到的目錄中便會留下構建以及打包后的文件了。如下:
其中以 以 'use strict';
Object.defineProperty(exports, '__esModule', {
value: true
});
exports.default = {
basePath: 'https://djtest.cn',
fileBasePath: 'https://djtest.cn'
};其實僅僅將ES6的語法轉譯成了ES5語法。其余的wxml、wxss以及js文件基本也是這樣的狀態,所以可以推斷源碼上傳至微信服務器后會執行真正的構建動作,開發工具只執行了一些簡單地構建行為。 雖然筆者并未從這份代碼中得到全部的真相,但希望這篇文章能夠給后續的探索者提供一些微薄的幫助。 以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網! 相關推薦: 以上就是微信小程序 devtool隱藏的秘密的詳細內容,更多請關注php中文網其它相關文章! 小程序是一種不需要下載安裝即可使用的應用,它實現了應用“觸手可及”的夢想,用戶掃一掃或者搜一下即可打開應用。 |
溫馨提示:喜歡本站的話,請收藏一下本站!