我有一些带有这样的 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 编译这段代码。我不允许更改为上面的代码。当我编译这段代码时,闭包编译器无法识别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(...);
是在一个外部文件中声明的,所以这不是问题。
我看到关于 Closure Compiler 和 UMD 模式的另一个问题:Google 闭包编译器和 UMD 模式,但这对我没有帮助。
我如何告诉闭包编译器root.returnExports
等于window.returnExports
?
笔记:
我想重命名为or之returnExports
类的东西,而不是保留它的名字。a
b