国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 熱點 > 微信 > 正文

微信小程序 require機制詳解及實例代碼

2024-07-22 01:16:43
字體:
來源:轉載
供稿:網友

微信小程序 require機制詳解

一, JS模塊加載:一次性加載全部JS, 但并不一定立即執行.

先提一提微信小程序架構: 類瀏覽器 -> HTTP本地服務 -> 云端服務

微信小程序運行的架構,基本上是瀏覽器 -> HTTP本地服務 -> 云端服務, HTTP本地服務用來讀取本地文件或者代理云端的文件資源。讀取項目中JS文件, 是由HTTP本地服務取本地存儲的腳本文件.

似乎比較簡單,一個HTML 引用所有JS文件

既然采用了這種架構,那微信小程序就類似瀏覽器那樣,借助一個HTML頁面來引用加載所有的JS文件。(注:這同NODE.JS的方式區別)

在小程序開發開具的HTTP服務部分代碼,可以看到這個服務干了這件事情:

微信小程序包目錄下面所有.js文件, 會按<script src="../xxx.js"> 方式插入生成一個HTML文件,然后類似瀏覽器方式加載.

讓HTTP本地服務配合,對JS文件作的包裝手法

可是事情并未結束,這種方式一加載,所有js文件都會立即執行,亂糟糟生成一團,怎么可能..那require函數又拿來干什么呢?原來這兒,HTTP服務在返回.JS文件內容的,給腳本內容包裝上了一層: define函數

代理服務部分代碼:

(projectManager.js)function getScripts(projInfo, callback) { ...  fs.readFile(fname, 'utf8', function(err, scripts) {    ....      scripts = 'define("' + moduleName + '", function(require, module, exports, ' + noBrowserStr +    '){ ' + scripts + '/n});',    needRequire && (scripts += 'require("' + moduleName + '")'), //page頁面js文件,會添加上require自己,加載后立即初始化。    .....    callback(null, scripts) //scripts串內容作為HTTP GET的返回

define函數非常簡單,大致如下:

......  var   ......  moduleList = {};   define = function(moduleName, factory) { //define是全局函數,每個JS文件都默認會調用.     moduleList[moduleName] = { status: status1, factory: factory }  };

從上面代碼看出,,這樣一來,每加載一個JS文件,只是將其文件名與腳本內容串加入了內存中的一個變量保存,并未執行。 注意,這就與普通的HTML 腳本引用加載立即執行完全不同了.

接下來,就輪到微信小程序的require函數出場了。

二, JS模塊初始化:按需遞歸式require初始化

先看看微信小程序require函數的定義:

....  require = function(moduleName) {        ....    var module = moduleList[moduleName]; //define函數調用時為moduleList賦的值    .....    if (module.status === status1) {       //如果未初始化,則初始化      var factory = module.factory, //這個factory就是這個JS文件的腳本.      obj = { exports: {} }, u = void 0;      factory && (u = factory(o(moduleName), obj, obj.exports)), module.exports = obj.exports || u, module.status = status2    }    return module.exports  }            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 定安县| 洪湖市| 平凉市| 油尖旺区| 赣州市| 常熟市| 曲水县| 垣曲县| 女性| 东源县| 高安市| 潼南县| 广丰县| 兰西县| 华宁县| 灌云县| 宜黄县| 攀枝花市| 太仓市| 随州市| 资阳市| 南召县| 亳州市| 深州市| 南靖县| 博白县| 平顺县| 衢州市| 曲周县| 栖霞市| 兰考县| 仪征市| 山东省| 和田县| 宁德市| 乌苏市| 贡觉县| 兴海县| 广安市| 岗巴县| 山东省|