JavaScript模塊化規範主要遵循CommonJS和AMD規範。 CommonJS規範-伺服器端JavaScript規範 Node.js是一個伺服器端JavaScript項目,採用了CommonJS標準實現其模塊系統。 CommonJS中採用一個全局require方法來載入模塊,主要由原生模塊m ...
JavaScript模塊化規範主要遵循CommonJS和AMD規範。
CommonJS規範-伺服器端JavaScript規範
Node.js是一個伺服器端JavaScript項目,採用了CommonJS標準實現其模塊系統。
CommonJS中採用一個全局require方法來載入模塊,主要由原生模塊module來實現和完成,該模塊在啟動時已經被載入。
模塊主要分為兩類:原生模塊,文件模塊。
1.原生模塊
原生模塊也是Node.js中最核心的模塊。原生模塊在Node.js源代碼編譯的時候編譯進了二進位執行文件,載入的速度最快。
Node.js中存在許多原生模塊,例如:http,net,os,path,fs, module等等,其引用方式為var fs = require('fs');
2.文件模塊
文件模塊是動態載入的,載入速度比原生模塊慢。但是Node.js對原生模塊和文件模塊都進行了緩存,在第二次require該模塊時,是不會有重覆開銷。
文件模塊可細分為3類。這三類文件模塊以文件尾碼來區分,Node.js會根據尾碼名來決定載入方法。
.js。通過fs模塊同步讀取js文件並編譯執行。
.node。通常為npm安裝的第三方模塊。
.json。讀取文件,調用JSON.parse解析載入。
雖然Node.js使用require方法引入模塊的方式看似簡單,但內部的載入卻並不簡單,且其中的優先順序也不一樣。
AMD規範-瀏覽器端JavaScript規範
CommonJS中模塊存放在本地,使用同步方式載入模塊,其載入時間基本相當於磁碟IO時間,這不會存在問題,但是如果環境是瀏覽器,則文件的載入受制於網路因素,如果網路載入比較慢,則可導致瀏覽器處於假死狀態,因此瀏覽器端只能採用非同步載入模塊的方式。
AMD:Asynchronous Module Definition(非同步模塊定義)。它採用非同步方式載入模塊,模塊的載入不影響它後面語句的運行。所有依賴這個模塊的語句,都定義在一個回調函數中,等到載入完成之後,這個回調函數才會運行。
AMD也採用require()語句載入模塊,但是不同於CommonJS,它要求兩個參數:require([module], callback);
第一個參數[module],是一個數組,裡面的成員就是要載入的模塊;第二個參數callback,則是載入成功之後的回調函數。目前,主要有兩個Javascript庫實現了AMD規範:require.js和curl.js。
require.js採用AMD規範實現模塊載入,其採用define函數來定義。define函數接受兩個參數,第一個參數為依賴數組,第二個參數為待定義的模塊函數。如果沒有依賴模塊,則第一個參數也可以省略。
文章來源:http://www.cnblogs.com/virtual/p/3734846.html#2941128