簡體   English   中英

使用 Google Closure Compiler 編譯代碼時出錯

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM