2010-02-09 238 views
6

Possible Duplicate:
jQuery compiled with Google Closure Compiler使用谷歌關閉編譯器

我使用jQuery和我有我所有的JS代碼中的application.js文件。當我使用Google Closure編譯器(使用高級選項)編譯「application.js」時,我得到一個沒有錯誤和警告的js文件。但是,我無法在頁面中使用該文件,在頁面加載時出現錯誤,其中顯示「TypeError:表達式的結果'$(」div.tile「)。d'[undefined]不是函數。」

我的問題是我可以編譯一個使用jQuery的js文件嗎?

回答

1

是的,如果你願意包括jQuery的文件與您的其他文件。

是的,如果你用簡單的方式,來代替。

否則,沒有。

+1

,因爲他希望利用先進的優化這不會對上述問題的工作讀高級優化;您無法通過高級優化器運行jQuery源代碼。您只能使用簡單的編譯器並指定jQuery的code_url參數,但這會在輸出中包含整個jQuery。 – Gabe 2011-09-03 05:45:19

16

您還可以,如果你使用了一個js文件是使用jQuery通過指定的jQuery的「EXTERN」文件中使用高級模式。這樣封閉編譯器不會改變你的javascript內部的jQuery函數調用。

java -jar compiler.jar --compilation_level ADVANCED_OPTIMIZATIONS --js_output_file application.js --externs jquery-1.4.4.externs.js 

你可以找到一些在這裏的jQuery的extern文件: http://code.google.com/p/closure-compiler/source/browse/trunk/contrib/externs/

8

你必須告訴Closure編譯器什麼都不優化。

我做這個在線編譯器(http://closure-compiler.appspot.com/home)通過添加externs_url paramater。當你在在線編譯器中輸入你的代碼時,它會自動附加一個類似於這個的頭文件,但是默認情況下沒有externs_url參數。

// ==ClosureCompiler== 
// @output_file_name default.js 
// @compilation_level ADVANCED_OPTIMIZATIONS 
// @externs_url https://closure-compiler.googlecode.com/git/contrib/externs/jquery-1.9.js 
// ==/ClosureCompiler== 

你可以在https://code.google.com/p/closure-compiler/source/browse/contrib/externs/上看到目前有哪些extern文件。他們擁有絕大多數的jQuery版本。

要使用可下載的Java版本的編譯器執行此操作,只需在cli上傳遞--externs_url參數,或下載所需的extern文件,然後將該文件名與-externs參數一起傳遞,就像在Palmerlee的答案中一樣。

如果你有興趣,爲什麼你不能只是打開通過http://code.google.com/closure/compiler/docs/api-tutorial3.html

+0

如何使用帶有可下載的Java版本編譯器的序言?我收到很多「錯誤 - 變量X未聲明」,並將它們全部添加爲--externs非常繁瑣。 – 2013-03-23 15:43:20

+0

@lambdor我認爲你必須使用正常的可下載版本的--externs的東西。您也可以通過他們的API訪問在線版本,該API使用序言版本https://developers.google.com/closure/compiler/docs/gettingstarted_api – Gabe 2013-04-01 19:22:22

+0

「要使用可下載的Java版本的編譯器執行此操作,您只需將'cli上的--externs_url'參數「。不幸的是,「'」--externs_url「不是一個有效的選項'」 – kuporific 2014-11-05 19:00:33