天天看點

js子產品化

AMD 規範在這裡:https://github.com/amdjs/amdjs-api/wiki/AMD

CMD 規範在這裡:https://github.com/seajs/seajs/issues/242

AMD 是 RequireJS 在推廣過程中對子產品定義的規範化産出。

CMD 是 SeaJS 在推廣過程中對子產品定義的規範化産出。

類似的還有 CommonJS Modules/2.0 規範,是 BravoJS 在推廣過程中對子產品定義的規範化産出。

還有不少⋯⋯

這些規範的目的都是為了 JavaScript 的子產品化開發,特别是在浏覽器端的。

目前這些規範的實作都能達成浏覽器端子產品化開發的目的。

差別:

1. 對于依賴的子產品,AMD 是提前執行,CMD 是延遲執行。不過 RequireJS 從 2.0 開始,也改成可以延遲執行(根據寫法不同,處理方式不同)。CMD 推崇 as lazy as possible.

2. CMD 推崇依賴就近,AMD 推崇依賴前置。看代碼:

// CMD

define(function(require, exports, module) {

var a = require('./a')

a.doSomething()

// 此處略去 100 行

var b = require('./b') // 依賴可以就近書寫

b.doSomething()

// ...

})

// AMD 預設推薦的是

define(['./a', './b'], function(a, b) { // 依賴必須一開始就寫好

...

雖然 AMD 也支援 CMD 的寫法,同時還支援将 require 作為依賴項傳遞,但 RequireJS 的作者預設是最喜歡上面的寫法,也是官方文檔裡預設的子產品定義寫法。

3. AMD 的 API 預設是一個當多個用,CMD 的 API 嚴格區分,推崇職責單一。比如 AMD 裡,require 分全局 require 和局部 require,都叫 require。CMD 裡,沒有全局 require,而是根據子產品系統的完備性,提供 seajs.use 來實作子產品系統的加載啟動。CMD 裡,每個 API 都簡單純粹。

繼續閱讀