1. 程式人生 > >模組化開發,AMD,CMD,Commonjs規範

模組化開發,AMD,CMD,Commonjs規範

angular、vue、react三大框架模組管理遵循的規範

webpack打包成一個檔案,一次都載入完,需要哪個就去執行哪個。不像傳統的頁面,引入很多檔案,要一個個按順序載入。
生成的都是閉包,變數隔離,並能避免汙染作用域。

vue,angularx,react載入內部模組時遵循commonjs —> 打包成一個檔案了,並轉成瀏覽器能執行的。
一般情況下,前端的採用require載入的都是遵循commonjs規範,例如angular、react、vue中的require某個模組和外掛。採用回撥函式載入的都是使用AMD規範,例如angularjs建立module時angular.module([], function() {});很多外部模組的引入也是採用的AMD規範,因為要走網路請求。
綜上:這三個框架採用的規範和是不是node環境沒有關係,載入內部模組方法採用require時,遵循commonjs規範;採用回撥函式方式載入時,採用AMD規範。

模組化方式

require是commonjs的模組化的方法,import是 es6的模組化方式,webpack的模組化,也是CommonJs規範。
require和requirejs不一樣,require是es5語法,引入一個模組。requirejs是引入js檔案,類似seajs,都是模組化工具。和直接引入檔案比,好處在於不汙染作用域中的物件。也可以管理依賴關係。
自己實現requirejs方法:可以用自執行的閉包實現。

require 用來載入程式碼,而 exports 和 module.exports 則用來匯出程式碼。
module.exports 和exports區別:
module.exports 初始值為一個空物件 {}
exports 是指向的 module.exports 的引用
require() 返回的是 module.exports 而不是 exports

js模組化的規範

amd 和 cmd 和 commonjs

amd —>requirejs
依賴前置。提前執行。但requirejs從2.0也可以延時執行。
定義模組的時候需要制定依賴模組,並以形參的方式引入factory中

cmd —>seajs
依賴就近。延時執行。按需載入,定義一個模組的時候不需要立即制定依賴模組,在需要的時候require就可以了。

commonjs —>nodejs
commonjs是伺服器端模組化的規範。Nodejs採用了這個規範。
一個單獨檔案就是一個模組,每個模組都是一個單獨的作用域。也就是說,在該模組內部定義的變數,無法被其它模組讀取,除非定義為global物件的屬性。
commonjs規範載入模組是同步的,只有載入完成,才能執行後面的操作。
AMD規範是非同步載入,允許指定回撥函式。由於nodejs主要用於服務端程式設計,模組檔案一般都已經存在與本地硬碟,所以載入起來比較快,不用考慮非同步載入的方式,所以commonjs規範比較適用。
但是,如果是瀏覽器環境,要從伺服器載入模組,就必須採用非同步模式,因此瀏覽器端一般採用AMD規範。