モジュラー関連

2195 ワード

テーマ1:なぜモジュール化を使うのか?
モジュール化の主な目的:ネーミング競合と依存管理の解決
また,コードの可読性,コードのデカップリング,多重性の向上も可能である.
テーマ2:CMD、AMD、CommonJS仕様はそれぞれ何を指しますか?どのようなアプリケーションがありますか
AMD,Asynchronous Module Definition,非同期モジュール定義.AMD仕様は、モジュールと依存が非同期でロードできるメカニズムを指定します.これは、ブラウザ側の非同期ロードに特に適しています.構文:define(id?,dependencies?,factory) id:定義中のモジュールの名前、オプションパラメータ、指定されていない場合は、デフォルトではモジュールローダが要求する指定したスクリプトの名前です.denpendencies:依存パラメータ、オプション.factory:実行する必要がある関数またはオブジェクトは、必須です.例:
define('modal',['jQuery','dialog'],function($,Dialog){
  $('.modal').show()
  Dialog.open()
})

  ,       modal,   jQuery Dialog  ,    'jQuery','dialog'。

AMDを実装するライブラリ:'RequireJS','curl','Dojo'
CommonJSはサーバ側モジュールの仕様で、Node.jsはこの仕様を採用しています.
requireとexports
requireは、1つの自由変数であり、1つの関数であり、1つのモジュール識別子を受信し、そのモジュールが出力したAPI exportsを返し、1つの自由変数であり、1つの関数であり、モジュール出力の唯一の表現方法であり、各種出力(API)をexportsの例に追加する.
//math.js
exports.add = function(){
  var sum = 0,i = 0, args = arguments, l = args.length
  while(i < l){
    sum += args[i++]
  }
return sum
}  //   add     exports 

//increment.js
var add = require('math').add    //  require  math  ,   ,     add  
exports.increment = function(val){
  return add(val,1)  
}    //   increment     exports 

//program.js
vat inc = require('increment').increment    
//  require  increment  ,   ,increnment     require  math     ,    add,math.js increment.js     。
var a = 1
inc(a)  // 2

CMD、Common Module Definitionも、モジュール化された考え方です.モジュールはファイル構文です.define(factory)例です.
//math.js
define(function(require,exports,module){
  exports.add = function(){
    var sum = 0,i = 0, args = arguments, l = args.length
    while(i < l){
      sum += args[i++]
    }
    return sum
  } 
})

//increment.js
define(function(require,exports,module){
  var add = require('math').add
  exports.increment = function(val){
    return add(val,1)  
  } 
})

//program.js
define(function(require,exports,module){
  vat inc = require('increment').increment
  var a = 1
  inc(a)  // 2

  module.id == "program"
})