您好,登錄后才能下訂單哦!
1. Javascript 先天缺乏模塊的功能。在其他高級語言中,Java有類文件,Python有import機制,Ruby有require,PHP有include和require,而Javascript 則需要依靠<script>標簽引入代碼,當腳本多的時候,會顯得雜亂無章。
2. 針對以上問題,CommonJS應運而生。CommonJS為Javascript制定了一個美好愿景:能夠在任何地方運行!(Not just for browser), CommonJS希望彌補Javascript沒有標準的缺陷(沒有模塊系統,標準庫較少,沒有標準接口,缺乏包管理系統),可以編寫大型應用,如服務器端Javascript,命令行工具,桌面圖形界面應用程序,混合應用等。
3. CommonJS規范涵蓋:
模塊、二進制Buffer, 字符集編碼,I/O流,進程環境,文件系統,套接字,web服務器網管接口,包管理等。
4. Node.JS遵循CommonJS規范,推進了CommonJS的發展.
5. CommonJS主要是為了JS在后端的表現制定的,不適合前端。為什么這么說呢?
前后端Javascript分別被擱置在HTTP的兩端,二者扮演的角色不同:
瀏覽器端Javascript | 服務器端Javascript | |
代碼的執行 | 需要經歷從同一服務器端分發到多個客戶端執行 | 相同代碼需要多次執行 |
瓶頸 | 在于帶寬 | 在于CPU和內存資源 |
代碼加載方式 | 需要通過網絡加載代碼 | 從磁盤加載代碼(二者速度不在一個數量級上) |
6. 于是AMD出現了,Asynchronous Module Definition. 異步模塊定義。
它就主要為前端JS的表現制定規范。
AMD規范只有一個API,其模塊定義如下:
define(id?,dependencies?,factory); //id,dependencies可選,factory內容就是實際代碼的內容。
a. Id:模塊標識,可以省略,這里的模塊標識指的是自己,即整個文件。所以當id省略的時候,就相當于定義了一個匿名模塊,這時候模塊文件名就是 模塊標識。e.g.模塊文件放在a.js中,那么a就是模塊名。
b. dependencies: 依賴的模塊。AMD規范要在聲明模塊的時候指定所有的依賴,并且還要當做形參傳到factory里面。例如:
define(['dep1', 'dep2'], function ( dep1, dep2 ){ … });
一個不包含依賴關系的例子:
define(function(){
var exports = {};
exports.method = function(){ ...};
return exports;
...
});
c. 從define函數中不難想到define函數具有異步性。它在執行時首先會異步去調用第二個參數中列出的依賴模塊,當所有模塊被載入完成后,如果第三個參數是一個回調函數則執行。
d. 在Node.js中,沒有看到define將模塊包起來,是因為Node實現了隱式包裝(即在對模塊進行 編譯時,node會對模塊進行頭尾包裝,以隔離各個模塊文件,防止變量污染)。
e. requireJS就是實現了AMD規范。
7. CMD規范由國內的玉伯提出,與AMD規范的區別在于定義模塊和依賴引入的部分。風格更接近于Node.可以看看Sea.js。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。