1. 程式人生 > >CommonJs,AMD,CMD是什麼?

CommonJs,AMD,CMD是什麼?

前端模組化的概念已經撲面而來,為什麼要模組化?

1.命名衝突

2.檔案依賴

為了解決上面的問題,我們使用閉包,名稱空間,還要考慮js檔案的載入順序,稍不留神就會出錯。

然而模組化的程式碼幫我們一次性解決了上面的問題,我們可以隨心所欲的命名,隨心所欲的引用,不用考慮載入順序,如此這般的清爽。

CommonJS,AMD(非同步模組定義),CMD(通用模組定義)這三個都是JS模組化過程中產生的規範,其中CommonJS是伺服器端的,同步方式,應用的例子最常見的是NodeJS。而AMD和CMD是瀏覽器端的,非同步方式,最常見的是requireJs和seaJs。

CommonJS

過去,js一直應用在瀏覽器端,隨著web2.0和Html5的到來,可以供js呼叫的介面越來越豐富,js在瀏覽器能做的事情也越來越多。但是在後端,js卻因為一直沒有相關的標準而沒有用武之地。

CommonJS規範的提出,彌補了這種缺憾。規範涵蓋了模組,二進位制,Buffer,I/O流,程序環境,檔案系統,套接字,單元測試,包管理等。有了這些,才有了Node的出現。現在,Node的應用越來越廣泛,也促進了CommonJS規範的完善,它們互相起到了相輔相成的作用。因為commonJS應用在服務端,所以在引用模組(一個檔案就是一個模組)的時候,使用同步方式也不會影響到讀取的速度,但是在瀏覽器端,就要用到非同步讀取的AMD,CMD規範了。

http://www.commonjs.org/specs/ 這是commonJS的官網,網站對CommonJS的定義就是javascript:not just for browers any more!

這是CommonJS模組標準應用的一個簡單地例子,exports對外提供模組內部的方法,require用來引用模組,獲取其中通過exports對外提供的方法

AMD和CMD

AMD 是 RequireJS 在推廣過程中對模組定義的規範化產出,CMD是SeaJS 在推廣過程中對模組定義的規範化產出。

兩者的區別就是對所依賴模組的載入時間不同。AMD對依賴的模組式提前執行,CMD對於依賴模組是延遲執行。

//AMD
define(['./a','./b'], function (a, b) {
    a.foo();
    b.foo();
});
//CMD
define(function (requie, exports, module) {
    var a = require('./a');
    a.foo();
 
    var b = requie('./b');
    b.foo();
}); 
從上邊的程式碼裡就可以看到兩者的區別,不過AMD現在也支援延遲載入。

相關推薦

淺析JS中的模塊規範(CommonJSAMDCMD) http://www.2cto.com/kf/201411/348276.html

cpu 重要 mat 只有一個 targe () actor cti 最重要的 如果你聽過js模塊化這個東西,那麽你就應該聽過或CommonJS或AMD甚至是CMD這些規範咯,我也聽過,但之前也真的是聽聽而已。 現在就看看吧,這些規範到底是啥東西,幹嘛的。

理解JS中的模塊規範(CommonJSAMDCMD

site 繼續 arr 包管理器 color sea 文件依賴 避免 說我   隨著互聯網的飛速發展,前端開發越來越復雜。本文將從實際項目中遇到的問題出發,講述模塊化能解決哪些問題,以及如何使用 Sea.js 進行前端的模塊化開發。 惱人的命名沖突   我們從一個簡單的習慣

再談 JS中的模組規範(CommonJSAMDCMD)來自玉伯的seajs分析

                隨著網際網路的飛速發展,前端開發越來越複雜。本文將從實際專案中遇到的問題出發,講述模組化能解決哪些問題,以及如何使用 Sea.js 進行前端的模組化開發。惱人的命名衝突我們從一個簡單的習慣出發。我做專案時,常常會將一些通用的、底層的功能抽象出來,獨立成一個個函式,比如funct

模組化開發AMDCMDCommonjs規範

angular、vue、react三大框架模組管理遵循的規範 webpack打包成一個檔案,一次都載入完,需要哪個就去執行哪個。不像傳統的頁面,引入很多檔案,要一個個按順序載入。 生成的都是閉包,變數隔離,並能避免汙染作用域。 vue,angularx,r

CommonJSAMDCMDes6 modules 區別

隨著前端js程式碼複雜度的提高,JavaScript模組化這個概念便被提出來,前端社群也不斷地實現前端模組化,直到es6對其進行了規範,下面就介紹JavaScript模組化 CommonJS,AMD,CMD 都是Javascript 語言程式設計中,為了模組定義程式碼而產生的規範。 commonjs是用在

CommonJsAMDCMD是什麼?

前端模組化的概念已經撲面而來,為什麼要模組化? 1.命名衝突 2.檔案依賴 為了解決上面的問題,我們使用閉包,名稱空間,還要考慮js檔案的載入順序,稍不留神就會出錯。 然而模組化的程式碼幫我們一次性解決了上面的問題,我們可以隨心所欲的命名,隨心所欲的引用,不用考慮載入順序,

CommonJSAMDCMD區別

com commonj -c 使用 cmd sync syn 服務器 模塊 AMD (Asynchromous Module Definition) 異步模塊定義 CMD (Common Module Definition) 通用模塊定義 CommonJs 是服務器端模塊的

js模組化AMDCMD的區別

最近在研究cmd和amd,在網上看到一篇不錯的文章,整理下看看。  在JavaScript發展初期就是為了實現簡單的頁面互動邏輯,寥寥數語即可;如今CPU、瀏覽器效能得到了極大的提升,很多頁面邏輯遷移到了客戶端(表單驗證等),隨著web2.0時代的到來,Ajax技術得到

前端模組化AMDCMD的區別

最近在研究cmd和amd,在網上看到一篇不錯的文章,整理下看看。 在JavaScript發展初期就是為了實現簡單的頁面互動邏輯,寥寥數語即可;如今CPU、瀏覽器效能得到了極大的提升,很多頁面邏輯遷移到了客戶端(表單驗證等),隨著web2.0時代的到來,Ajax

前端模組化AMDCMD的區別總結

AMD和CMD都是瀏覽器端的js模組規範,2者的區別總結如下: 1、AMD推崇依賴前置,CMD推崇就近依賴 //AMD: m

前端模組化IIFEcommonjsAMDUMDES6 Module規範超詳細講解

[TOC] ## 為什麼前端需要模組化 在沒有模組化的時候,多個指令碼引入頁面,會造成諸多問題,比如: - 多人協同開發的時候,系統中可能會引入很多js指令碼,這些js會定義諸多全域性變數,這時候很容易出現變數名覆蓋的問題 ```html

前端模塊化的一些理解-commonJsAMDCMD

() urn fig comm tor 實現 ports ont 相對 ---恢復內容開始--- 前端模塊化規範有三種:CommonJs\AMD\CMD CommonJs 用於服務器端 AMD 用於瀏覽器環境,是RequireJS在推廣過程中對模塊定義的規範化產出

CommonJSAMDCMD、NodeJs、RequireJS到底有什麽聯系?

模塊化 包管理 conf 解決辦法 寫上 開發者 ase 例子 頁面 一、CommonJS 1.一開始大家都認為JS不強大,沒什麽用,官方定義的API只能構建基於瀏覽器的應用程序,CommonJS就按耐不住了,CommonJS API定義很多普通應用程序(主要指非瀏覽

CommonJSAMDCMD區別

環境 add 編程 style script webp git 加載模塊 AS 本文參考自:https://www.cnblogs.com/chenguangliang/p/5856701.html 1、CommonJS NodeJS是CommonJS規範的實現,web

再嘮叨JS模塊化加載之CommonJSAMDCMD、ES6

scrip 用例 fun 理想 str text 引用 寫到 加載完成 Javascript模塊化編程,已經成為一個迫切的需求。理想情況下,開發者只需要實現核心的業務邏輯,其他都可以加載別人已經寫好的模塊。 Javascript社區做了很多努力,在現有的運行環境中,實現”模

JavaScript模塊化 --- CommonjsAMDCMD、ES6 modules

con scroller exports 打包 www. pretty modules 前端 depends JavaScript模塊化 --- Commonjs、AMD、CMD、ES6 modules 2017.08.25 11:49 6666瀏覽 轉載:https

CommonJSAMDCMD、NodeJs、RequireJS到底有什麼聯絡?

一、CommonJS 1.一開始大家都認為JS不強大,沒什麼用,官方定義的API只能構建基於瀏覽器的應用程式,CommonJS就按耐不住了,CommonJS API定義很多普通應用程式(主要指非瀏覽器的應用)使用的API,從而填補了這個空白。它的終極目標是提供一個類似Python,Ruby和Java標準庫

前端commonjsAMDCMD、ES6等模組化的對比

CommmonJS用於node端,是同步載入的AMD依賴於requirejs,是非同步載入的,是提前載入,立即載入 CMD依賴於seajs,是非同步載入,延後載入,就近載入,用時載入 ES6是ES2015的簡稱,一般通過export來暴露模組,import來匯入模組Commo

CommonJSAMDCMD和ES6模塊化區別

var web family ava def node 如果 改變 所有 本文參考自:https://www.cnblogs.com/chenguangliang/p/5856701.html 1、CommonJS NodeJS是CommonJS規範的實現,webpac

對於模塊加載:ES6、CommonJSAMDCMD的區別

內存 imp 之前 readfile 分開 sil 但是 基礎 從服務器 運行和編譯的概念 編譯包括編譯和鏈接兩步。 編譯,把源代碼翻譯成機器能識別的代碼或者某個中間狀態的語言。 比如java只有JVM識別的字節碼,C#中只有CLR能識別的MSIL。還簡單的作一些比如