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 编译这段代码。我不允许更改为上面的代码。当我编译这段代码时,闭包编译器无法识别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类的东西,而不是保留它的名字。ab

4

0 回答 0