JS編命名規範:AMD、CMD、CommonJS

7097 ワード

現在流行しているネーミング仕様は以下のとおりです.
1.AMD仕様実現者:requirejs、dojo
2.CMD仕様実現者:seajs
3.CommonJS仕様実装者:NodeJS
4.ES 6の仕様
5. UMD(Universal)
 
AMD仕様はCommonJSのTransport/C仕様に由来し、フォーマットは以下の通りである.
define(id?, dependencies?, factory);

モジュール名仕様:
1.モジュール名は、複数のstring nameまたは'/'から構成される.
2.string nameはアルパカのルールに従うか、または:'.','.';
3.モジュール名に拡張子を付けることを禁止する.js';
4.最上位パスモジュール名はルート空間で始まり、相対パスモジュール名は'.','..'である.開始;
依存仕様:
1.「require」、「exports」、「module」の場合、CommonJS仕様に従います.そうでない場合、パラメータをパラメータリストとしてfactoryに注入します.
工場仕様:
1.依存パラメータがない場合、toStringによってrequireに依存する.依存パラメータがあれば依存パラメータによってアクセスします.
2.先に実行し、工場が後に実行する.
 
define.amd  

1.amd属性はこのdefine関数がAMD規範を遵守することを識別し、AMDを遵守しないdefine関数と区別する.
2.amd仕様が更新されると、amd 2属性が名前になります.
3.amd属性の値はオブジェクトですが、オブジェクトの具体的な内容は実装者がカスタマイズします.
 
CommonJSとの関係:
1.CommonJS(インプリメンテーション者:NodeJS)のfactoryに同期のないrequireがあれば通用します.ブラウザ側がサポートしていないため、パフォーマンスにも影響があります.
 
CMD仕様:
define(function(require, exports, module) {

  // The module code goes here

});

1.require(id)同期ロード用
2. require.async(idList,callback)非同期ロード用
3.CMD区分CommonJS:moduleが存在し、defineが存在しないNode環境に属する;module、defineはCMD環境に属している.
 
UMD:汎用モジュール定義方式は、汎用コードを提供して実装を包み、多様なプラットフォーム(AMD、CMD、Node、Browser Global)で使用することを意味する.
//   AMD        :AMD     Case:            ,      ;  Global     Global ;

(function (root, factory) {

    if (typeof define === 'function' && define.amd) {

        // AMD. Register as an anonymous module.

        define(['depModA', 'depModB'], function (depModA, depModB) {

            return (root.amdWebGlobal = factory(depModA, depModB));

        });

    } else if (typeof exports === 'object') {

        // Node or CMD.

        module.exports = factory(require('depModA'), require('depModB'));

    } else {

        // Browser globals

        root.amdWebGlobal = factory(root.depModA, root.depModB);

    }

}(this, function (depModA, depModB) {



    // ..... (implementation)     



    return {};

}));

個人的には、各環境に共通するコードを定義するには、以下のようにすることができます(まだ使用されていませんが、現在は参考にしています).
// 1. Module factory.

function factory(optionalDepList){



  // CODE ... implementation.

  console.log("Factory implementation");

  

  // return object or else.

  return;

}



// 2. Module name.

factory.modName = '...';

// 3. Dependant List.

factory.depList = [

  'dependModuleName1',

  'dependModuleName2'

];




// Universal CODE. (function(root, factory){ if(typeof define === 'function' && !!define.amd){ // AMD define(factory.modName, factory.depList, factory); }else if(typeof define === 'function'){ // CMD define(function(require, exports, module){ module.exports = factory.apply(root, arguments) || module.exports; }); }else if(typeof module === 'object' && typeof define === 'undefined'){ // CommonJS|NodeJS module.exports = factory.apply(root, arguments) || module.exports; }else{ // Browser global root[factory.modName] = factory.apply(root); } })(this, factory);

 
 
 
 
参照先:
1. CMD仕様
2. AMD仕様
3. SeaJS
4. UMD