1

我正在使用Google Closure编译器编译我的代码。使用Google Closure编译器编译代码时出错

我正在编译的代码是来自封闭库,Hammer,Hammer-Time和我自己的一些代码的相关部分。

的编制工作,直到我加入锤到编辑,在这一点,当我跑我的JavaScript我得到以下错误:

Uncaught TypeError: n.add is not a function 

是指:

function mb(a, c, e, l, f, k) { 
    if (!c) 
     throw Error("Invalid event type"); 
    var h = !!f 
     , n = nb(a); 
    n || (a[ib] = n = new V(a)); 
    e = n.add(c, e, l, f, k); 
    if (!e.b) { 
     l = Jb(); 
     e.b = l; 
     l.src = a; 
     l.listener = e; 
     if (a.addEventListener) 
      a.addEventListener(c.toString(), l, h); 
     else if (a.attachEvent) 
      a.attachEvent(Kb(c.toString()), l); 
     else 
      throw Error("addEventListener and attachEvent are unavailable."); 
     kb++ 
    } 
} 

如果我重新命名Hammer中的add函数我没有得到这个问题,但我想知道是否有替代方案?

采用全封闭的编译器的命令是:

回答

1

Hammer.js与JSDoc评论这是接近但由谷歌关闭编译器使用的意见不完全兼容写入。我猜这是你错误的根源,但需要更多的调试才能确定。如果您仍想尝试编译Hammer.js以及您的代码,请参阅此页面关于Debugging Compiled Code。我怀疑你需要修改Hammer.js代码才能使它与Closure Compiler一起工作。

另一种选择是创建一个“extern”文件,告诉Closure编译器Hammer的API。在使用Closure Compiler编译代码之后,对Hammer的调用保持不变,您将在加载代码之前在目标HTML页面上加载Hammer(已在Hammer网站上缩小的版本)。请参阅How do I write an externs file?。的文档注释JSDoc和关闭编译器之间的区别

一个例子是:使用JSDoc而@param {Number}关闭编译器就认为以一个包装类型的引用和用于该原始数类型使用@param {number}