AMD、CMD和CommonJS規範
阿新 • • 發佈:2019-02-06
CommonJS規範
CommonJS是在瀏覽器環境之外構建JavaScript生態系統為目標產生的專案,比如伺服器和桌面環境中。CommonJS規範是為了解決JavaScript的作用域問題而定義的模組形式, 可以使每個模組在它自身的名稱空間中執行。該規範的主要內容是:模組必須通過 module.exports匯出對外的變數或介面,通過require()來匯入其他模組的輸出到當前模組。 例子:// moduleA.js
module.exports = function( value ){
return value * 2;
}
// moduleB.js var multiplyBy2 = require('./moduleA'); var result = multiplyBy2(4);
CommonJS是同步載入模組,但其實也有瀏覽器端的實現,其原理是將所有模組都定義好並通過id進行索引,這樣就可以瀏覽器進行解析了
伺服器端的Node.js遵循CommonJS規範。核心思想是允許模組通過require 方法來同步載入所要依賴的其他模組,然後通過 exports或module.exports來匯出需要暴露的介面。
require("module");
require("../file.js");
exports.doStuff = function() {};
module.exports = someValue;
優點:
- 伺服器端便於重用
- NPM中已經將近20w個模組包
- 簡單並容易使用
define("module", ["dep1", "dep2"], function(d1, d2) {
return someExportedValue;
});
require(["module", "../file"], function(module, file) { /* ... */ });
優點:
- 適合在瀏覽器環境非同步載入
- 並行載入多個模組
define(function(require, exports, module) {
var $ = require('jquery');
var Spinning = require('./spinning');
exports.doSomething = ...
module.exports = ...
})
優點:
- 依賴就近,延遲執行
- 很容易在node中執行
- 依賴SPM打包,模組的載入邏輯偏重