次のような 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.returnExports
Closure Compiler に等しいことを伝えるにはどうすればよいですwindow.returnExports
か?
ノート:
名前を保持するのではなく、またはのreturnExports
ような名前に変更したい。a
b