CommonJS,AMD,CMD區別 - 鄭星陽 - ITeye博客

CommonJS,AMD,CMD區別

  • 博客分類:?
  • seajs和requirejs

JavaScript

zccst轉載?

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

為什么暈呢?是因為沒用,或用得太少。光看看文章是不行的。?



CommonJS?

CommonJs 是服務器端模塊的規范,Node.js采用了這個規范。?

根據CommonJS規范,一個單獨的文件就是一個模塊。加載模塊使用require方法,該方法讀取一個文件并執行,最后返回文件內部的exports對象。?

例如:?
// foobar.js?

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

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

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

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

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

test.bar();?


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


AMD((Asynchromous Module Definition)?

AMD 是 RequireJS 在推廣過程中對模塊定義的規范化產出?

AMD異步加載模塊。它的模塊支持對象 函數 構造器 字符串 JSON等各種類型的模塊。?

適用AMD規范適用define方法定義模塊。?

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

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

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

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



CMD?

CMD是SeaJS 在推廣過程中對模塊定義的規范化產出?

CMD和AMD的區別有以下幾點:?

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

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寫法,但依賴前置是官方文檔的默認模塊定義寫法。?

3.AMD的api默認是一個當多個用,CMD嚴格的區分推崇職責單一。例如:AMD里require分全局的和局部的。CMD里面沒有全局的 require,提供 seajs.use()來實現模塊系統的加載啟動。CMD里每個API都簡單純粹。?

SeaJS 和 RequireJS的主要區別 在此有解釋

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/248951.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/248951.shtml
英文地址,請注明出處:http://en.pswp.cn/news/248951.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

739. Daily Temperatures

根據每日 氣溫 列表,請重新生成一個列表,對應位置的輸入是你需要再等待多久溫度才會升高的天數。如果之后都不會升高,請輸入 0 來代替。 例如,給定一個列表 temperatures [73, 74, 75, 71, 69, 72, 76, 73],你的輸出應…

【NOIP2018】DAY2T2——填數游戲(輪廓線狀壓的dp?搜索打表)

描述 小 D 特別喜歡玩游戲。這一天,他在玩一款填數游戲。 這個填數游戲的棋盤是一個n m的矩形表格。玩家需要在表格的每個格子中填入一個數字(數字 0 或者數字 1),填數時需要滿足一些限制。 下面我們來具體描述這些限制。 為了方…

Mysql中遇到的錯誤

Caused by: java.sql.SQLException: Unknown system variable ‘tx_isolation’ 這種錯誤是因為數據庫版本新的但是mysql的jar包是舊的,所以導入最新的mysqljar包 注意實體類和數據庫字段的映射關系,實體類中使用駝峰式的命名規則,大寫的字母…

Express 入門之Router - worldtree_keeper的專欄 - CSDN博客

要了解Router我們需要先知道到Application,首先,每一個express實例本身內部就內建了router,所以我們先從簡單的下手,先使用application;另外這里我們只選擇get方法,作為我們Router.Method, 之所以使用get是…

rest測試定義

1.為什么要做接口測試: 1.因為很多系統關聯都是基于接口實現的,接口測試可以將系統復雜的系統關聯進行簡化 2.接口工程比較單一,能夠比較好的進行測試覆蓋,也相對容易實現自動化持續集成 3.接口相對于界面功能 ,會更底…

團隊開發進度報告9

(1)站立會議 (2)任務面板 (3)具體內容 昨天:完成了界面控件按鈕的設置問題:PHP數據處理,如何實現在線數據交互問題今天:hbuilder后臺環境搭建 轉載于:https:/…

nodejs+express整合kindEditor實現圖片上傳 - 木子豐咪咕晶 - 開源中國

kindEditor官網上中提供了ASP,ASP.NET,JSP相關的整合應用,http://kindeditor.net/docs/upload.html可以參照實現nodejs的整合,發現實用nodejs更簡單 環境: unbuntu 14.10 nodejs 0.10.35 express 4.11.2 formidable 1.0.16 kindEditor 4.1.10 webStorm 8 1.通過IDE或終端創建…

基于springboot多模塊項目使用maven命令打成war包放到服務器上運行的問題

首先,大家看到這個問題,可能并不陌生,而且腦子里第一映像就是使用mava中的clear package 或者 clear install進行打包,然后在項目中的target文件夾下面找到xxx.war,將這個war包放到外置的tomcat服務器下的webapps下面&…

Kafka學習筆記(3)----Kafka的數據復制(Replica)與Failover

1. CAP理論 1.1 Cosistency(一致性) 通過某個節點的寫操作結果對后面通過其他節點的讀操作可見。 如果更新數據后,并發訪問的情況下可立即感知該更新,稱為強一致性 如果允許之后部分或全部感知不到該更新,稱為弱一致性。 若在之后的一段時間&…

H5頁面隨機數字鍵盤支付頁面

H5頁面隨機數字鍵盤支付頁面 有個H5支付的業務需要隨機數字的鍵盤 參考了下文:https://blog.csdn.net/Mr_Smile2014/article/details/52473351 做了一些小修改: 在原有的基礎上,增加了一些按鍵反饋的效果。 每個按鍵加上邊框。 最終效果&…

expressjs路由和Nodejs服務器端發送REST請求 - - ITeye博客

Nodejs創建自己的server后,我們如果需要從客戶端利用ajax調用別的服務器端的數據API的接口,這時候出現了ajax跨域問題。 一種是利用在客戶端解決跨域問題 這種方案大家可以去網上查查 另一種方案是在服務器端去請求別的服務器,然后將數據再…

Jmeter操作mysql數據庫測試

1. 選中線程組鼠標點擊右鍵添加-->配置元件-->JDBC Connection Configuration; 2. DataBase Connection Configuration配置 Variable Name:配置元件的的所有配置所保存的變量,自定義變量名稱(不能使用mysql作為變量名,多個…

axios發送自定義請求頭的跨域解決

前端發送來的axios請求信息 this.$axios.request({ url:http://127.0.0.1:8001/pay/shoppingcar/, method:post, headers:{ authenticate:a073b3dabbb140e8b9d28debb6a356a1 # 自定義的請求頭部信息鍵值對, }, # 接上,這種key也算是一種請求頭,需要加入django中間件內…

前端“智能”靜態資源管理 - Onebox - 博客園

前端“智能”靜態資源管理 模塊化/組件化開發,僅僅描述了一種開發理念,也可以認為是一種開發規范,倘若你認可這規范,對它的分治策略產生了共鳴,那我們就可以繼續聊聊它的具體實現了。 很明顯,模塊化/組件化…

【轉】幾張圖看懂列式存儲

幾張圖看懂列式存儲 轉載于:https://www.cnblogs.com/apeway/p/10870211.html

hive -e和hive -f的區別(轉)

大家都知道,hive -f 后面指定的是一個文件,然后文件里面直接寫sql,就可以運行hive的sql,hive -e 后面是直接用雙引號拼接hivesql,然后就可以執行命令。 但是,有這么一個東西,我的sql當中有一個s…

我們是如何做好前端工程化和靜態資源管理 - 無雄 - 博客園

我們是如何做好前端工程化和靜態資源管理 隨著互聯網的發展,我們的業務也日益變得更加復雜且多樣化起來,前端工程師也不再只是做簡單的頁面開發這么簡單,我們需要面對的十分復雜的系統性問題,例如,業務愈來愈復雜&…

Mybatis-plus之RowBounds實現分頁查詢

物理分頁和邏輯分頁 物理分頁:直接從數據庫中拿出我們需要的數據,例如在Mysql中使用limit。 邏輯分頁:從數據庫中拿出所有符合要求的數據,然后再從這些數據中拿到我們需要的分頁數據。 優缺點 物理分頁每次都要訪問數據庫&#xf…

常見的6種JavaScript設計模式

常見的6種JavaScript設計模式 構造函數模式 /*** 構造一個動物的函數 */ function Animal(name, color){this.name name;this.color color;this.getName function(){return this.name;} } // 實例一個對象 var cat new Animal(貓, 白色); console.log( cat.getName() );工…

峰度(Kurtosis)和偏度(Skewness)

峰度(Kurtosis) 定義峰度又稱峰態系數,表征概率密度分布曲線在平均值處峰值高低的特征數,即是描述總體中所有取值分布形態陡緩程度的統計量。直觀看來,峰度反映了峰部的尖度。這個統計量需要與正態分布相比較。 公式定…