Common Js,AMD,CMD


私のブログYangChen'sブログへようこそ.
先端プロジェクトが大きくなって複雑になりました.モジュール化といえば当然この3つに言及します.この3つは先端モジュール化の基準であり、それらがないとjsは今のように流行しないし、npmという管理ツールもないので、これほど多くの先端開発フレームがありません.この三つのモジュール化基準を簡単に説明しましょう.
Common Js
CommunJsサーバー端のモジュール化仕様の典型的な例はNodejsです.Common JS仕様によると、単独のファイルはモジュールです.ロードモジュールは、ファイルを読み出して実行し、最後にファイル内部のexportオブジェクトに戻ります.
CommunJSローディングモジュールは同期していますので、ロードが完了してから後の操作が実行されます.Nodejsのように主にサーバーに使われています.ロードされているモジュールファイルは一般的にはすでにローカルハードディスクが存在していますので、ロードが速くて、非同期ロードの方式を考慮しなくてもいいです.ただし、ブラウザ環境であれば、サーバーからモジュールをロードするには、非同期モードが必要です.したがって、他の2つの仕様があります.つまり、AMD、CMDソリューションです.
Common Js規格のコードは以下の通りです.
//       js   ,          

//     
var test = "private"; 

//     
function example () { 

    this.foo = function () { 
        // do someing ... 
    } 
    this.bar = function () { 
        //do someing ... 
    } 
} 

//exports              
var example = new example(); 
exports.foobar = foobar; 
したがって、Common Jsのキーは、非同期であり、もう一つのファイルはモジュールであり、また生まれつきexport、require、require方法を内蔵しています.なぜですか?朴霊の《深入浅出Nodejs》を推薦して、簡単に言って包装しました.
AMD
次はAMDです.そのグラフィックカードのメーカーAMDではなく、Aynchromous Module Definitionです.直接翻訳したら、非同期モジュールの定義です.これはrequireJSが提示した標準であり、その典型的な特徴は非同期であり、もう一つの特徴はモジュールローディングフロントであり、事前に実行することであり、AMD標準の特徴はdefine方法であり、AMD例を挙げてみましょう.
//         ,             
define(['someModule1', ‘someModule2’], function (someModule1, someModule2) { 

    function foo () { 
        /// someing 
        someModule1.test(); 
    } 

    return {foo: foo} 
}); 
AMDもCommon JS仕様に対応しています.書き方は以下の通りです.
define(function (require, exports, module) { 

    var reqModule = require("./someModule"); 
    requModule.test(); 

    exports.asplode = function () { 
        //someing 
    } 
}); 
CMD
CMDはSeaJSの普及の規範で、この標準も中国人が出したものです.SeaJSの作者の一人は玉伯哈です.
CMDとAMDの違いは以下の点があります.
  • は、依存するモジュールAMDに対して予め実行され、CMDは遅延実行である.但し、RequireJSは2.0から遅延実行可能に変更されました.
  • CMDは、依存性が近く、AMDは前置依存を推奨する.
  • 例は以下の通りです
    //AMD 
    define(['./a','./b'], function (a, b) { 
    
        //         
        a.test(); 
        b.test(); 
    }); 
    //CMD 
    define(function (requie, exports, module) { 
    
        //         
        var a = require('./a'); 
        a.test();  
        ... 
        //    
        if (status) { 
    
            var b = requie('./b'); 
            b.test(); 
        } 
    }); 
    AMDはCMDの書き方にも対応していますが、前置依存は公式文書のデフォルトモジュール定義の書き方です.
    また、AMDのapiはデフォルトでは複数の使用時に、CMDの厳格な区分が推奨される職責シングルです.例えば、AMDの中でrequireは大域のと局部のを分けます.CMDには大域的なrequireがありません.seajs.use()を提供してモジュールシステムのロード起動を実現します.CMDはAPIごとに単純で純粋です.