Common Js,AMD,CMD
私のブログYangChen'sブログへようこそ.
先端プロジェクトが大きくなって複雑になりました.モジュール化といえば当然この3つに言及します.この3つは先端モジュール化の基準であり、それらがないとjsは今のように流行しないし、npmという管理ツールもないので、これほど多くの先端開発フレームがありません.この三つのモジュール化基準を簡単に説明しましょう.
Common Js
CommunJsサーバー端のモジュール化仕様の典型的な例はNodejsです.Common JS仕様によると、単独のファイルはモジュールです.ロードモジュールは、ファイルを読み出して実行し、最後にファイル内部のexportオブジェクトに戻ります.
CommunJSローディングモジュールは同期していますので、ロードが完了してから後の操作が実行されます.Nodejsのように主にサーバーに使われています.ロードされているモジュールファイルは一般的にはすでにローカルハードディスクが存在していますので、ロードが速くて、非同期ロードの方式を考慮しなくてもいいです.ただし、ブラウザ環境であれば、サーバーからモジュールをロードするには、非同期モードが必要です.したがって、他の2つの仕様があります.つまり、AMD、CMDソリューションです.
Common Js規格のコードは以下の通りです.
AMD
次はAMDです.そのグラフィックカードのメーカーAMDではなく、Aynchromous Module Definitionです.直接翻訳したら、非同期モジュールの定義です.これはrequireJSが提示した標準であり、その典型的な特徴は非同期であり、もう一つの特徴はモジュールローディングフロントであり、事前に実行することであり、AMD標準の特徴はdefine方法であり、AMD例を挙げてみましょう.
CMDはSeaJSの普及の規範で、この標準も中国人が出したものです.SeaJSの作者の一人は玉伯哈です.
CMDとAMDの違いは以下の点があります.は、依存するモジュールAMDに対して予め実行され、CMDは遅延実行である.但し、RequireJSは2.0から遅延実行可能に変更されました. CMDは、依存性が近く、AMDは前置依存を推奨する. 例は以下の通りです
また、AMDのapiはデフォルトでは複数の使用時に、CMDの厳格な区分が推奨される職責シングルです.例えば、AMDの中でrequireは大域のと局部のを分けます.CMDには大域的なrequireがありません.seajs.use()を提供してモジュールシステムのロード起動を実現します.CMDはAPIごとに単純で純粋です.
先端プロジェクトが大きくなって複雑になりました.モジュール化といえば当然この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
}
});
CMDCMDはSeaJSの普及の規範で、この標準も中国人が出したものです.SeaJSの作者の一人は玉伯哈です.
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ごとに単純で純粋です.