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仕様に由来し、フォーマットは以下の通りである.
モジュール名仕様:
1.モジュール名は、複数のstring nameまたは'/'から構成される.
2.string nameはアルパカのルールに従うか、または:'.','.';
3.モジュール名に拡張子を付けることを禁止する.js';
4.最上位パスモジュール名はルート空間で始まり、相対パスモジュール名は'.','..'である.開始;
依存仕様:
1.「require」、「exports」、「module」の場合、CommonJS仕様に従います.そうでない場合、パラメータをパラメータリストとしてfactoryに注入します.
工場仕様:
1.依存パラメータがない場合、toStringによってrequireに依存する.依存パラメータがあれば依存パラメータによってアクセスします.
2.先に実行し、工場が後に実行する.
1.amd属性はこのdefine関数がAMD規範を遵守することを識別し、AMDを遵守しないdefine関数と区別する.
2.amd仕様が更新されると、amd 2属性が名前になります.
3.amd属性の値はオブジェクトですが、オブジェクトの具体的な内容は実装者がカスタマイズします.
CommonJSとの関係:
1.CommonJS(インプリメンテーション者:NodeJS)のfactoryに同期のないrequireがあれば通用します.ブラウザ側がサポートしていないため、パフォーマンスにも影響があります.
CMD仕様:
1.require(id)同期ロード用
2. require.async(idList,callback)非同期ロード用
3.CMD区分CommonJS:moduleが存在し、defineが存在しないNode環境に属する;module、defineはCMD環境に属している.
UMD:汎用モジュール定義方式は、汎用コードを提供して実装を包み、多様なプラットフォーム(AMD、CMD、Node、Browser Global)で使用することを意味する.
個人的には、各環境に共通するコードを定義するには、以下のようにすることができます(まだ使用されていませんが、現在は参考にしています).
参照先:
1. CMD仕様
2. AMD仕様
3. SeaJS
4. UMD
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