日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

CommonJS,AMD,CMD区别 - 郑星阳 - ITeye博客

發(fā)布時(shí)間:2023/12/10 javascript 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CommonJS,AMD,CMD区别 - 郑星阳 - ITeye博客 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

CommonJS,AMD,CMD區(qū)別

  • 博客分類:?
  • seajs和requirejs

JavaScript

zccst轉(zhuǎn)載?

學(xué)得比較暈,再次看commonjs,amd, cmd時(shí)好像還是沒完全弄清楚,今天再整理一下:?
commonjs是用在服務(wù)器端的,同步的,如nodejs?
amd, cmd是用在瀏覽器端的,異步的,如requirejs和seajs?
其中,amd先提出,cmd是根據(jù)commonjs和amd基礎(chǔ)上提出的。?

為什么暈?zāi)?#xff1f;是因?yàn)闆]用,或用得太少。光看看文章是不行的。?



CommonJS?

CommonJs 是服務(wù)器端模塊的規(guī)范,Node.js采用了這個(gè)規(guī)范。?

根據(jù)CommonJS規(guī)范,一個(gè)單獨(dú)的文件就是一個(gè)模塊。加載模塊使用require方法,該方法讀取一個(gè)文件并執(zhí)行,最后返回文件內(nèi)部的exports對(duì)象。?

例如:?
// foobar.js?

//私有變量?
var test = 123;?

//公有方法?
function foobar () {?

??? this.foo = function () {?
??????? // do someing ...?
??? }?
??? this.bar = function () {?
??????? //do someing ...?
??? }?
}?

//exports對(duì)象上的方法和變量是公有的?
var foobar = new foobar();?
exports.foobar = foobar;?

//require方法默認(rèn)讀取js文件,所以可以省略js后綴?
var test = require('./boobar').foobar;?

test.bar();?


CommonJS 加載模塊是同步的,所以只有加載完成才能執(zhí)行后面的操作。像Node.js主要用于服務(wù)器的編程,加載的模塊文件一般都已經(jīng)存在本地硬盤,所以加載起來(lái)比較快,不用考慮異步加載的方式,所以CommonJS規(guī)范比較適用。但如果是瀏覽器環(huán)境,要從服務(wù)器加載模塊,這是就必須采用異步模式。所以就有了 AMD? CMD 解決方案。?


AMD((Asynchromous Module Definition)?

AMD 是 RequireJS 在推廣過(guò)程中對(duì)模塊定義的規(guī)范化產(chǎn)出?

AMD異步加載模塊。它的模塊支持對(duì)象 函數(shù) 構(gòu)造器 字符串 JSON等各種類型的模塊。?

適用AMD規(guī)范適用define方法定義模塊。?

//通過(guò)數(shù)組引入依賴 ,回調(diào)函數(shù)通過(guò)形參傳入依賴?
define(['someModule1', ‘someModule2’], function (someModule1, someModule2) {?

??? function foo () {?
??????? /// someing?
??????? someModule1.test();?
??? }?

??? return {foo: foo}?
});?
AMD規(guī)范允許輸出模塊兼容CommonJS規(guī)范,這時(shí)define方法如下:?

define(function (require, exports, module) {?
?????
??? var reqModule = require("./someModule");?
??? requModule.test();?
?????
??? exports.asplode = function () {?
??????? //someing?
??? }?
});?



CMD?

CMD是SeaJS 在推廣過(guò)程中對(duì)模塊定義的規(guī)范化產(chǎn)出?

CMD和AMD的區(qū)別有以下幾點(diǎn):?

1.對(duì)于依賴的模塊AMD是提前執(zhí)行,CMD是延遲執(zhí)行。不過(guò)RequireJS從2.0開始,也改成可以延遲執(zhí)行(根據(jù)寫法不同,處理方式不通過(guò))。?

2.CMD推崇依賴就近,AMD推崇依賴前置。?
//AMD?
define(['./a','./b'], function (a, b) {?

??? //依賴一開始就寫好?
??? a.test();?
??? b.test();?
});?

//CMD?
define(function (requie, exports, module) {?
?????
??? //依賴可以就近書寫?
??? var a = require('./a');?
??? a.test();?
?????
??? ...?
??? //軟依賴?
??? if (status) {?
?????
??????? var b = requie('./b');?
??????? b.test();?
??? }?
});?
雖然 AMD也支持CMD寫法,但依賴前置是官方文檔的默認(rèn)模塊定義寫法。?

3.AMD的api默認(rèn)是一個(gè)當(dāng)多個(gè)用,CMD嚴(yán)格的區(qū)分推崇職責(zé)單一。例如:AMD里require分全局的和局部的。CMD里面沒有全局的 require,提供 seajs.use()來(lái)實(shí)現(xiàn)模塊系統(tǒng)的加載啟動(dòng)。CMD里每個(gè)API都簡(jiǎn)單純粹。?

SeaJS 和 RequireJS的主要區(qū)別 在此有解釋

總結(jié)

以上是生活随笔為你收集整理的CommonJS,AMD,CMD区别 - 郑星阳 - ITeye博客的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。