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}