干熟妇在线视频午夜剧场一级A级|99成人香视频日本两性激情视频|久久 午夜福利无码精品人妻一区|热久久超碰精品精品少妇一区二区|五月天综合在线国产一区免费视频|亚洲成人中心热re久久99|亚洲国产怡红院丁香五月综合h|玖玖九久久久午夜射精视频

十二年專注于品牌網(wǎng)站建設(shè) 十余年專注于網(wǎng)站建設(shè)_小程序開發(fā)_APP開發(fā),低調(diào)、敢創(chuàng)新、有情懷!
南昌百恒網(wǎng)絡(luò)微信公眾號(hào) 掃一掃關(guān)注
小程序
tel-icon全國服務(wù)熱線:400-680-9298,0791-88117053
掃一掃關(guān)注百恒網(wǎng)絡(luò)微信公眾號(hào)
掃一掃打開百恒網(wǎng)絡(luò)微信小程序

百恒網(wǎng)絡(luò)

南昌百恒網(wǎng)絡(luò)

南昌微信開發(fā)實(shí)戰(zhàn)——模塊化

admin 2017-03-24 4646

JavaScript模塊規(guī)范

在任何一個(gè)大型應(yīng)用中模塊化是很常見的,與一些更傳統(tǒng)的編程語言不同的是,JavaScript (ECMA-262版本)還不支持原生的模塊化。

Javascript社區(qū)做了很多努力,在現(xiàn)有的運(yùn)行環(huán)境中,實(shí)現(xiàn)"模塊"的效果。通行的JavaScript模塊規(guī)范主要有兩種:CommonJS、AMD、UMD、CMD等。

CommonJS

CommonJS規(guī)范是服務(wù)器端Javascript模塊規(guī)范。

Node.js的模塊系統(tǒng),就是參照CommonJS規(guī)范實(shí)現(xiàn)的。NPM也遵循了commonJS定義的包規(guī)范,從而形成了一套完整的生態(tài)系統(tǒng)。

CommonJS定義的模塊分為:{模塊引用(require)} {模塊定義(exports)} {模塊標(biāo)識(shí)(module)}。require()用來引入外部模塊;exports對象用于導(dǎo)出當(dāng)前模塊的方法或變量,唯一的導(dǎo)出口;module對象就代表模塊本身。

exports對象

module對象

AMD

AMD是"Asynchronous Module Definition"的縮寫,意思是"異步模塊定義",是前端模塊規(guī)范。

RequireJS就是實(shí)現(xiàn)了AMD規(guī)范的呢。

AMD規(guī)范定義了一個(gè)自由變量或者說是全局變量 define 的函數(shù)。

define( id?, dependencies?, factory );

id 為字符串類型,表示了模塊標(biāo)識(shí),為可選參數(shù)。若不存在則模塊標(biāo)識(shí)應(yīng)該默認(rèn)定義為在加載器中被請求腳本的標(biāo)識(shí)。如果存在,那么模塊標(biāo)識(shí)必須為頂層的或者一個(gè)絕對的標(biāo)識(shí)。

dependencies ,是一個(gè)當(dāng)前模塊依賴的,已被模塊定義的模塊標(biāo)識(shí)的數(shù)組字面量。

factory,是一個(gè)需要進(jìn)行實(shí)例化的函數(shù)或者一個(gè)對象。

define

UMD

CommonJS module以服務(wù)器端為第一的原則發(fā)展,選擇同步加載模塊。它的模塊是無需包裝的,但它僅支持對象類型(objects)模塊。AMD以瀏覽器為第一(browser-first)的原則發(fā)展,選擇異步加載模塊。它的模塊支持對象、函數(shù)、構(gòu)造器、字符串、JSON等各種類型的模塊,因此在瀏覽器中它非常靈活。這迫使人們想出另一種更通用格式 UMD(Universal Module Definition),希望提供一個(gè)前后端跨平臺(tái)的解決方案。

UMD

UMD的實(shí)現(xiàn)很簡單,先判斷是否支持AMD(define是否存在),存在則使用AMD方式加載模塊。再判斷是否支持Node.js模塊格式(exports是否存在),存在則使用Node.js模塊格式。前兩個(gè)都不存在,則將模塊公開到全局(window或global)。

define是否存在

exports是否存在

CMD

CMD 即Common Module Definition通用模塊定義,CMD規(guī)范是國內(nèi)發(fā)展出來的,就像AMD有個(gè)requireJS,CMD有個(gè)瀏覽器的實(shí)現(xiàn)SeaJS,SeaJS要解 決的問題和requireJS一樣,只不過在模塊定義方式和模塊加載(可以說運(yùn)行、解析)時(shí)機(jī)上有所不同。

Sea.js 推崇一個(gè)模塊一個(gè)文件,遵循統(tǒng)一的寫法

define(id?, deps?, factory)

因?yàn)镃MD推崇一個(gè)文件一個(gè)模塊,所以經(jīng)常就用文件名作為模塊id,CMD推崇依賴就近,所以一般不在define的參數(shù)中寫依賴,在factory中寫。

factory是一個(gè)函數(shù),有三個(gè)參數(shù),function(require, exports, module)

require 是一個(gè)方法,接受 模塊標(biāo)識(shí) 作為唯一參數(shù),用來獲取其他模塊提供的接口

exports 是一個(gè)對象,用來向外提供模塊接口

module 是一個(gè)對象,上面存儲(chǔ)了與當(dāng)前模塊相關(guān)聯(lián)的一些屬性和方法

CMD

微信小程序模塊化機(jī)制

微信小程序秉承了JavaScript模塊化的機(jī)制,通過module.exports暴露對象,通過require來獲取對象。

模塊開發(fā)

以微信小程序QuickStart為例,微信小程序模塊采用CommonJS規(guī)范

utils/util.js

utils

util.js

模塊運(yùn)行

微信小程序還是要以前端程序方式在微信瀏覽器中運(yùn)行,由于CommonJS規(guī)范是服務(wù)器端模塊規(guī)范,微信小程序運(yùn)行時(shí)會(huì)自動(dòng)轉(zhuǎn)換為前端模塊規(guī)范。

以微信小程序QuickStart調(diào)試時(shí)代碼為例

utils/util.js

utils

util.js

微信小程序運(yùn)行的代碼與CMD模塊規(guī)范基本符合。

使用第三方模塊

微信小程序運(yùn)行環(huán)境exports、module沒有定義,無法通過require導(dǎo)入模塊,需要對第三方模塊強(qiáng)制導(dǎo)出后才能正常導(dǎo)入。

微信小程序使用Immutable.js https://segmentfault.com/a/11...

微信小程序使用Underscore.js https://segmentfault.com/a/11...

ECMAScript 6模塊系統(tǒng)

ECMAScript 6,模塊被作為重要組成部分加入其中。

ES6的模塊提供了2個(gè)新的語法,分別是export和import。

export模塊導(dǎo)出

export模塊導(dǎo)出

import模塊導(dǎo)入

import模塊導(dǎo)入

微信小程序還沒實(shí)現(xiàn)ECMAScript 6。

本文僅限內(nèi)部技術(shù)人員學(xué)習(xí)交流,不得作于其他商業(yè)用途.希望此文對廣大技人員有所幫助。文章出自:南昌微信開發(fā)公司-百恒網(wǎng)絡(luò)。

400-680-9298,0791-88117053
掃一掃關(guān)注百恒網(wǎng)絡(luò)微信公眾號(hào)
掃一掃打開百恒網(wǎng)絡(luò)小程序

歡迎您的光顧,我們將竭誠為您服務(wù)×

售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售后服務(wù) 售后服務(wù)
 
售后服務(wù) 售后服務(wù)
 
備案專線 備案專線
 
×