0

次のような UMD パターンのコードがあります。

(function (root, factory) {
    if (typeof define === 'function' && define.amd) {        
        define([], factory);
    } else if (typeof module === 'object' && module.exports) {
        module.exports = factory();
    } else {
        root.returnExports = factory();
  }
}(this, function () {
    function sum(a, b)
    {
      return a + b;
    }

    return { sum: sum};
}));

$('body').text(returnExports.sum(32,3));

ADVANCED_OPTIMIZATIONSそして、フラグを付けて Google Closure Compiler でこのコードをコンパイルしたいと思います。上記のコードに変更することはできません。このコードをコンパイルすると、Closure Compiler はそれroot.returnExportsが等しいことを認識せずwindow.returnExports、コードを次のようにコンパイルします。

function a() {
    return {
        b: function(b, c) {
            return b + c
        }
    }
}
"function" === typeof define && define.c ? define([], a) : "object" === typeof module && module.a ? module.a = a() : a();
$("body").text(returnExports.b(32, 3));

returnExportsもちろん、 (9行目)が定義されていないため、エラーがスローされます。jQuery 関数$('body').text(...);は extern ファイルで宣言されているので、それは問題ではありません。

Closure Compiler と UMD pattern に関する別の質問がありました: Google Closure Compiler and UMD pattern ですが、それは役に立ちませんでした。

root.returnExportsClosure Compiler に等しいことを伝えるにはどうすればよいですwindow.returnExportsか?

ノート:

名前を保持するのではなく、またはのreturnExportsような名前に変更したい。ab

4

0 に答える 0