天天看點

子產品化開發,AMD,CMD,Commonjs規範angular、vue、react三大架構子產品管理遵循的規範子產品化方式js子產品化的規範

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規範。

繼續閱讀