Javascript模塊化編程系列三: CommonJS & AMD 模塊化規範描述

CommonJS Module 規範     

CommonJS 的模塊化規範描述在Modules/1.1.1 中javascript

目前實現此規格的包有:java

Yabble,CouchDB,Narwhal (0.2), WakandaTeaJS (formerly v8cgi)CommonScriptPINF JS LoaderSeaJSArangoDBsorrow.jsgit

注意,這裏並無找到 requireJS,由於它使用的是AMD規範。github

此規範定義的具體內容包括:數據庫

  • Require
    require是一個function。這個function接收一個模組的標識,返回外部模組的接口。若是有循環依賴的話,由於須要一個傳遞依賴,外部模組就不會當即執行;in this case, the object returned by "require" must contain at least the exports that the foreign module has prepared before the call to require that led to the current module's execution.
    若是請求的模組不能被返回,require須要拋出異常。
    require 函數必須有 "main"屬性。
    必須有"paths" attribute.
  • Module Context
    在一個模組中,有一個"require"的自由變量。
    有一個"exports"的自由變量。
    必須有一個"module"的對象變量
  • Module Identifiers
    模組標識是正斜槓區隔的字符串短語。
    短語使用駝峯法,「.」,「..」命名
    模塊的標識能夠是「相對的」或「頂層」的。
    頂層標識解決概念性模組的命名
    相對標識符被解決相對的標識符模塊。
  • Unspecified
    此規範遺留了一些互操做不肯定性的要點:
    是否模塊需存儲數據庫,文件系統,工廠功能模塊,互換的連接庫?
    路徑是否被模組加載器支持來解決模塊標識的問題?

看一下依此規範定義和使用的例子:
math.jsapi

 

[javascript]  view plain copy
 
  1. exports.add = function() {  
  2.     var sum = 0, i = 0, args = arguments, l = args.length;  
  3.     while (i < l) {  
  4.         sum += args[i++];  
  5.     }  
  6.     return sum;  
  7. };  

increment.js框架

[javascript]  view plain copy
 
  1. var add = require('math').add;  
  2. exports.increment = function(val) {  
  3.     return add(val, 1);  
  4. };  

program.js異步

[javascript]  view plain copy
 
  1. var inc = require('increment').increment;  
  2. var a = 1;  
  3. inc(a); // 2  
  4.    
  5. module.id == "program";  


注,以上例子並不能實際run, 由於咱們沒有實現require這個function.模塊化

 

 

AMD規範                    

目前實現AMD規範的有:
Dojo (1.7)、MooTools (2.0)、Firebug (1.8) , jQuery (1.7) ,RequireJS等
AMD的規範定義在 :  https://github.com/amdjs/amdjs-api/wiki
AMD API 規範主要包含:
  • AMD
    -引用和定義模塊化的JS代碼的主要構建塊。
    define() 函數的定義   -- define(id?, dependencies?, factory);
    id表示該模塊的標識,爲可選參數。

    dependencies是一個字符串Array,表示該模塊依賴的其餘全部模塊標識,模塊依賴必須在真正執行具體的factory方法前解決,這些依賴對象加載執行之後的返回值,能夠以默認的順序做爲factory方法的參數。dependencies也是可選參數,當用戶不提供該參數時,實現AMD的框架應提供默認值爲[「require」,」exports」,「module」]。

    factory是一個用於執行改模塊的方法,它能夠使用前面dependencies裏聲明的其餘依賴模塊的返回值做爲參數,若該方法有返回值,當該模塊被其餘模塊依賴時,返回值就是該模塊的輸出。
    define.amd property 
    Transporting more than one module at a time 
    看一個例子:
    [javascript]  view plain copy
     
    1. define("alpha", ["require", "exports", "beta"], function (require, exports, beta) {  
    2.      exports.verb = function() {  
    3.          return beta.verb();  
    4.          //Or:  
    5.          return require("beta").verb();  
    6.      }  
    7.  });  


  • require
    requrie() 函數的API,容許動態的,異步的加載模塊和解決模塊ID標識字符串到文件路徑的轉換。
    require(String) 
    require(Array, Function) 
    require.toUrl(String) 

  • Loader-Plugins
    容許加載非傳統的JS 依賴項的其餘資源。
  • Common-Config
    可選的常見配置。
 
相關文章
相關標籤/搜索