JavaScript模組化思想之CommonJS、AMD、CMD、UMD
我所了解的三種模組加載方式分別是CommonJS、AMD和CMD
網上關於這三種模組加載方式講解的文章很多,我就簡單的做個介紹,如果想深入了解一下可以去網上查閱一下相關的資料。
(1)CommonJS
在CommonJS中,一個單獨的檔案就是一個模組。被呼叫模組內使用exports暴露接口,呼叫模組使用require呼叫暴露出來的接口。
範例如下:
// student.js // 私有变量 var a = 123; function add(student) { console.log('Add student:' + student); } // exports对象上的方法和变量是外部可访问的 exports.add = add;
1 // 使用require載入student.js模組2 var student = require('./student.js');
CommonJS載入模組是「同步」的,也就是說,如果我們要呼叫被呼叫模組中的公共方法和變量,一定要等到被呼叫模組載入完畢後才可以。用於服務端的NodeJS就採用的CommonJS來管理模組。但在瀏覽器端,同步載入會因為收到網路環境的影響存在很大的不確定性,所以CommonJS不適合瀏覽器端。
如果在瀏覽器環境下想要從伺服器載入模組,就必須使用「非同步」的方式。所以就出現了AMD和CMD解決方案。
(2)AMD(Asynchromous Module Definition)
requireJS就是一種使用AMD非同步載入模組的管理外掛程式。 AMD模組支援對象,函數,建構器,字串,JSON等各種類型的模組。
AMD規範使用define方法定義模組:
//define(param1,param2) 通过define方法定义模块 //@param1: 数组,元素为引入的依赖模块 //@param2: 回调函数,通过形参传入依赖 define(['firstModule','secondModule'],function(firstModule,secondModule){ function foo(){ firstModule.test(); } // 暴露foo() return {foo:foo}; });
同時,AMD允許使用define方法定義模組是相容於CommonJS規範,可以使用require和exports。
define(function(require,exports,module){ var reqModule = require("./firstModule"); reqModule.test(); exports.pubPort = function(){ // 函数体 } });
(3)CMD
CMD和AMD的區別主要體現在對依賴模組的執行時機上,AMD是「依賴前置」。主張提前載入所需模組,CMD是「依賴就近」。也就是可以用到的時候再加載。有點類似Java中的「餓漢模式」和「懶漢模式」。
從requireJS 2.0開始,也可以延遲載入了。
舉個栗子:
// AMD——依赖前置 define(['./a','./b'],function(a,b){ //提前声明要依赖的模块 }); // CMD define(function(require,exports,module){ //依赖可以就近写 var a = require('./a'); a.test(); //软依赖 if(status){ var b = require('./b'); b.test(); }
這裡有個名詞叫軟依賴,我個人理解軟依賴就是不一定依賴,硬依賴就是一定會依賴的模組,軟依賴就是需要才依賴,不需要就不依賴,根據status判斷。
(4)UMD
UMD——Universal Module Definition,通用的模組定義
UMD等於CommonJS加上AMD。 UMD的工作其實就是做了一個判斷:
- 先判斷目前環境對NodeJs支援的模組是否存在,存在就用Node.js模組模式(exports)。
- 如果不支持,就判斷是否支持AMD(define),存在就使用AMD方式加載。
覺得自己對UMD還不是很理解,不知道具體該怎麼去用。還是繼續去了解了解。加油!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

如何使用WebSocket和JavaScript實現線上語音辨識系統引言:隨著科技的不斷發展,語音辨識技術已成為了人工智慧領域的重要組成部分。而基於WebSocket和JavaScript實現的線上語音辨識系統,具備了低延遲、即時性和跨平台的特點,成為了廣泛應用的解決方案。本文將介紹如何使用WebSocket和JavaScript來實現線上語音辨識系

WebSocket與JavaScript:實現即時監控系統的關鍵技術引言:隨著互聯網技術的快速發展,即時監控系統在各個領域中得到了廣泛的應用。而實現即時監控的關鍵技術之一就是WebSocket與JavaScript的結合使用。本文將介紹WebSocket與JavaScript在即時監控系統中的應用,並給出程式碼範例,詳細解釋其實作原理。一、WebSocket技

如何利用JavaScript和WebSocket實現即時線上點餐系統介紹:隨著網路的普及和技術的進步,越來越多的餐廳開始提供線上點餐服務。為了實現即時線上點餐系統,我們可以利用JavaScript和WebSocket技術。 WebSocket是一種基於TCP協定的全雙工通訊協議,可實現客戶端與伺服器的即時雙向通訊。在即時線上點餐系統中,當使用者選擇菜餚並下訂單

如何使用WebSocket和JavaScript實現線上預約系統在當今數位化的時代,越來越多的業務和服務都需要提供線上預約功能。而實現一個高效、即時的線上預約系統是至關重要的。本文將介紹如何使用WebSocket和JavaScript來實作一個線上預約系統,並提供具體的程式碼範例。一、什麼是WebSocketWebSocket是一種在單一TCP連線上進行全雙工

JavaScript和WebSocket:打造高效的即時天氣預報系統引言:如今,天氣預報的準確性對於日常生活以及決策制定具有重要意義。隨著技術的發展,我們可以透過即時獲取天氣數據來提供更準確可靠的天氣預報。在本文中,我們將學習如何使用JavaScript和WebSocket技術,來建立一個高效的即時天氣預報系統。本文將透過具體的程式碼範例來展示實現的過程。 We

JavaScript教學:如何取得HTTP狀態碼,需要具體程式碼範例前言:在Web開發中,經常會涉及到與伺服器進行資料互動的場景。在與伺服器進行通訊時,我們經常需要取得傳回的HTTP狀態碼來判斷操作是否成功,並根據不同的狀態碼來進行對應的處理。本篇文章將教你如何使用JavaScript來取得HTTP狀態碼,並提供一些實用的程式碼範例。使用XMLHttpRequest

用法:在JavaScript中,insertBefore()方法用於在DOM樹中插入一個新的節點。這個方法需要兩個參數:要插入的新節點和參考節點(即新節點將要插入的位置的節點)。

JavaScript是一種廣泛應用於Web開發的程式語言,而WebSocket則是一種用於即時通訊的網路協定。結合二者的強大功能,我們可以打造一個高效率的即時影像處理系統。本文將介紹如何利用JavaScript和WebSocket來實作這個系統,並提供具體的程式碼範例。首先,我們需要明確指出即時影像處理系統的需求和目標。假設我們有一個攝影機設備,可以擷取即時的影像數
