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

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

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

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

      admin 2017-03-24 5040

      JavaScript模塊規(guī)范

      在任何一個大型應(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)識(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ī)范定義了一個自由變量或者說是全局變量 define 的函數(shù)。

      define( id?, dependencies?, factory );

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

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

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

      define

      UMD

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

      UMD

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

      define是否存在

      exports是否存在

      CMD

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

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

      define(id?, deps?, factory)

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

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

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

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

      module 是一個對象,上面存儲了與當(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)行時會自動轉(zhuǎn)換為前端模塊規(guī)范。

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

      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個新的語法,分別是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ò)微信公眾號
      掃一掃打開百恒網(wǎng)絡(luò)小程序

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

      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售后服務(wù) 售后服務(wù)
       
      售后服務(wù) 售后服務(wù)
       
      備案專線 備案專線
       
      ×
      日韩人妻无码精品久久久不卡| 国产成人麻豆亚洲综合无码精品| 精品久久久中文字幕二区| 久久久久精品国产亚洲AV无码| 久久99精品国产99久久| 国产女人18毛片水真多18精品| 日韩乱码中文字幕视频| 日韩三级中文字幕| 妇女自拍偷自拍亚洲精品| 亚洲国产精品自在自线观看| 国产精品久久久久久久久免费| 91精品全国免费观看含羞草| 久久婷婷国产综合精品| 久久国产成人精品| 亚洲国产精品高清久久久| 久久96国产精品久久久| 亚洲日韩国产精品第一页一区 | 久久精品99香蕉国产| 九九热在线视频观看这里只有精品| 九九久久精品国产| 国产伦精品一区二区三区视频猫咪 | 亚洲性色精品一区二区在线 | 日韩免费视频一区二区| 国产午夜亚洲精品不卡| 国产亚洲精品成人久久网站| 国产精品亚洲а∨无码播放不卡 | 精品400部自拍视频在线播放| 日韩一区二区超清视频| 亚洲日韩精品A∨片无码加勒比| 国产av一区二区三区日韩| 秋霞日韩一区二区三区在线观看| 精品国产日韩亚洲一区在线| 日韩三级电影视频| 成人国内精品久久久久影院| 亚洲AV蜜桃永久无码精品| 国产精品五月天强力打造| 精品人妻少妇一区二区三区| 精品日韩在线视频一区二区三区 | 精品一区二区三区波多野结衣| 97精品视频在线观看| 2022久久国产精品免费热麻豆|