[英]Error when compiling code with Google Closure Compiler
我正在使用 Google Closure 編譯器編譯我的代碼。
我正在編譯的代碼是來自閉包庫、Hammer、Hammer-Time 和我自己的一些代碼的相關部分。
編譯工作,直到我將 Hammer 添加到編譯中,此時當我運行 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
函數,我不會遇到這個問題,但我想知道是否有替代方法?
完整的閉包編譯器命令是:
java -jar compiler.jar --js src/js/closure-library/closure/goog/base.js --js src/js/init.js --js src/js/router.js --js src/js/closure-library/closure/goog/debug/error.js --js src/js/closure-library/closure/goog/dom/nodetype.js --js src/js/closure-library/closure/goog/string/string.js --js src/js/closure-library/closure/goog/asserts/asserts.js --js src/js/closure-library/closure/goog/debug/entrypointregistry.js --js src/js/closure-library/closure/goog/array/array.js --js src/js/closure-library/closure/goog/labs/useragent/util.js --js src/js/closure-library/closure/goog/object/object.js --js src/js/closure-library/closure/goog/labs/useragent/browser.js --js src/js/closure-library/closure/goog/labs/useragent/engine.js --js src/js/closure-library/closure/goog/labs/useragent/platform.js --js src/js/closure-library/closure/goog/useragent/useragent.js --js src/js/closure-library/closure/goog/events/browserfeature.js --js src/js/closure-library/closure/goog/disposable/idisposable.js --js src/js/closure-library/closure/goog/disposable/disposable.js --js src/js/closure-library/closure/goog/events/eventid.js --js src/js/closure-library/closure/goog/events/event.js --js src/js/closure-library/closure/goog/events/eventtype.js --js src/js/closure-library/closure/goog/reflect/reflect.js --js src/js/closure-library/closure/goog/events/browserevent.js --js src/js/closure-library/closure/goog/events/listenable.js --js src/js/closure-library/closure/goog/events/listener.js --js src/js/closure-library/closure/goog/events/listenermap.js --js src/js/closure-library/closure/goog/events/events.js --js src/js/closure-library/closure/goog/dom/browserfeature.js --js src/js/closure-library/closure/goog/dom/tagname.js --js src/js/closure-library/closure/goog/dom/tags.js --js src/js/closure-library/closure/goog/string/typedstring.js --js src/js/closure-library/closure/goog/string/const.js --js src/js/closure-library/closure/goog/html/safestyle.js --js src/js/closure-library/closure/goog/html/safestylesheet.js --js src/js/closure-library/closure/goog/fs/url.js --js src/js/closure-library/closure/goog/i18n/bidi.js --js src/js/closure-library/closure/goog/html/safeurl.js --js src/js/closure-library/closure/goog/html/trustedresourceurl.js --js src/js/closure-library/closure/goog/html/safehtml.js --js src/js/closure-library/closure/goog/dom/safe.js --js src/js/closure-library/closure/goog/html/legacyconversions.js --js src/js/closure-library/closure/goog/math/math.js --js src/js/closure-library/closure/goog/math/coordinate.js --js src/js/closure-library/closure/goog/math/size.js --js src/js/closure-library/closure/goog/dom/dom.js --js src/js/closure-library/closure/goog/dom/classes.js --js src/js/app.js --js src/js/hammer.js --js src/js/hammer-time.js --externs=src/js/app-externs.js --compilation_level=ADVANCED_OPTIMIZATIONS
Hammer.js 是用 JSDoc 注釋編寫的,這些注釋與 Google Closure Compiler 使用的注釋接近但不完全兼容。 我猜這是你錯誤的根源,但需要更多的調試才能確定。 如果您仍想嘗試將 Hammer.js 與您的代碼一起編譯,請參閱有關調試已編譯代碼的頁面。 我懷疑您需要稍微修改 Hammer.js 代碼才能使其與 Closure Compiler 一起使用。
另一種選擇是創建一個“extern”文件,告訴 Closure Compiler Hammer 的 API。 使用 Closure Compiler 編譯您的代碼后,對 Hammer 的調用將保持不變,您將在加載代碼之前在目標 HTML 頁面上加載 Hammer(已在 Hammer 網站上找到的縮小版本)。 請參閱如何編寫外部文件? .
JSDoc 和 Closure Compiler 之間的文檔注釋有何不同的一個示例是:JSDoc 使用@param {Number}
而 Closure Compiler 將其視為對包裝器類型的引用,並使用@param {number}
作為原始數字類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.