「JavaScript」はどのようにあなたのプラグインをCommonJS、AMD、CMDと生JSに互換させますか?

1784 ワード

モジュール標準
Common JSCommonJSは、3つのグローバル変数moduleexportsrequire、およびAMDを有する.しかし、requireにもexportsという大域変数があるので、この変数を用いて検出しない.
インターフェースを外部に提供するためには、module.exports(すなわちCMD)にインターフェースをバインドすることができる.
function MyModule() {
    // ...
}

if(typeof module !== `undefined` && typeof exports === `object`) {
    module.exports = MyModule;
}
CMDdefine仕様では、define.cmd関数が公有属性CMDを有すると定義されている.exports.MyModule = ...モジュールには、returnを使用してリターンする2つの方法があります.
AMDAMD仕様では、define関数は、同じ公有属性define.amdを有する.AMDのパラメータはこのモジュールの依存性である.では、インタフェースはどうやってAMDに提供されますか?オブジェクトを返すので、このモジュールのインターフェースとしてこのオブジェクトを使用します.
function MyModule() {
    // ...
}

if(typeof define === `function` && define.amd) {
    define(function() { return MyModule; });
}
締め括りをつける
私たちはAMDモジュールインターフェース、CMDモジュールインターフェースを提供するほか、元のJSインターフェースも提供します.CMDおよびAMDは、いずれも外部インターフェースを定義するためにreturnを使用することができるので、コードに統合することができる.
直接使えるコードは以下の通りです.
;(function(){
    function MyModule() {
        // ...
    }
    
    var moduleName = MyModule;
    if (typeof module !== 'undefined' && typeof exports === 'object') {
        module.exports = moduleName;
    } else if (typeof define === 'function' && (define.amd || define.cmd)) {
        define(function() { return moduleName; });
    } else {
        this.moduleName = moduleName;
    }
}).call(this || (typeof window !== 'undefined' ? window : global);