2011-01-24 62 views
4

我有幾個javacsript文件,我使用js打包程序打包它們,然後將它們全部合併並將它們包含在頁面中。在javascript中找到錯誤

的問題是,他們都擠滿我得到這個錯誤後:

Error: missing ; before statement

我想這是因爲地方的JS文件新線來代替;的性格,因爲封隔器刪除新行,你得到的錯誤

所以,我怎麼能找到哪裏;在腳本(s)ommited?

+2

傳遞解壓後的代碼通過JSLint。它會告訴你在哪裏放置你的分號。但是,它也可能表示其他幾十個錯誤:) – 2011-01-24 16:00:42

+0

您可能需要更換壓縮機。 YUI Compressor很好,但Google Closure Compiler可能會更好。以下是關於此主題的文章:http://www.bloggingdeveloper.com/post/Closure-Compiler-vs-YUI-Compressor-Comparing-the-Javascript-Compression-Tools.aspx。 – 2011-01-24 16:07:15

+0

謝謝。發現它:D(這是循環jquery插件btw) – Alex 2011-01-24 16:44:16

回答

3

存在一個名爲jslint的工具,它可以用很多選項靜態分析JavaScript源代碼。它應該告訴你失敗的地方。還有一個在線版本可用。檢查出來: http://www.jslint.com/

2

當你使用它們時,文件會給你一個錯誤嗎沒有打包?

var func = function() { 
... 
}; //<--- semicolon required! 

var obj = { 
... 
}; //<--- semicolon required! 

您正在使用什麼包裝(JSMin和帕克唐: - 一些加殼使用對象文本(見this否則他們產生不正確的代碼),當你需要使用文字定義函數時使用分號,也如果你缺少分號,不喜歡它)?您也可以嘗試通過JSLint運行您的文件以查看錯誤的存在位置。我建議首先通過JSLint運行解壓後的版本(以便您可以確定解壓後的版本是否存在錯誤)。

3

根據您使用的工具,這可能會發生。假設有兩個.js文件:

a.js

(function() { 
    var bar = 10; 
}()) 

b.js

var foo = 5; 
alert(foo); 

雙方將separatly工作,但如果你收拾在一起,就不會工作:

(function() { var bar = 10; }())var foo = 5;alert(foo); 

顯然,因爲缺少;。一個很好的模式,以避免對每一個啓動JavaScript文件與;,如:

固定a.js

;(function() { 
    var bar = 10; 
}()) 

固定b.js

;var foo = 5; 
alert(foo); 

輸出

;(function() {var bar = 10;}());var foo = 5;alert(foo); 

全部清楚,謝謝!