2009-11-17 29 views
5

我想壓縮我的2000多行javascript,並且我測試了http://dean.edwards.name/packer/http://closure-compiler.appspot.com/home當我壓縮腳本時JavaScript停止工作

但是在這兩種情況下,壓縮的腳本都會給我帶來錯誤。 一個錯誤的例子是jQuery(document).Da is not a function

爲什麼我的腳本不能在優化後工作? 我能做些什麼來優化/壓縮我的腳本?

+0

我不認爲你會得到一個答案,而無需繳納違規的代碼片段。 – 2009-11-17 02:54:31

+0

你在腳本中使用了分號嗎? – 2009-11-17 02:56:45

+0

JSLint將幫助您找到您的JS問題:http://www.jslint.com/ – 2009-11-17 03:02:55

回答

3

你可以嘗試在線YUI壓縮機。這是谷歌的第一個結果:http://www.refresh-sf.com/yui/

+0

謝謝你的工作。之後對代碼進行模糊處理類似於殺死壓縮:( – Steven 2009-11-17 03:07:32

+0

我使用此網站測試了模糊處理:http://www.javascriptobfuscator.com/Default.aspx – Steven 2009-11-17 03:08:13

+0

即使您使用YUI壓縮器,也可能遇到此問題,就像我做的一樣,看到我對分號的回答,改變你正在使用的工具可能只是重新排列文件,並且會隱藏這個問題,但是下次運行YUI壓縮器時它可能會再次出現。 – nicholaides 2009-11-17 03:09:47

6

請確保您在每個JavaScript文件的開頭都有一個分號。離奇的,我知道,但這裏的原因:

你可能有這樣的事情在一個文件中:

function someFunc() { 
    ... 
} 

隨後在接下來的文件是這樣的(這是許多jQuery插件怎麼看):

(function($) { 
    ... 
})(jQuery); 

這被壓縮成這樣:

function someFunc(){ }(function($){...})(jQuery); 

基本上調用0因爲它是論點與function($){...}。然後,它將採取任何返回的內容,並假定它是一個函數,並以jQuery作爲參數進行調用。

這就是爲什麼大多數jQuery插件以;(function($){開頭。

在每個文件的開頭放置一個分號(或結束,但要一致)會讓你的腳本是這樣的:

;function someFunc(){ }; (function($){...})(jQuery); 

這樣一來,如預期腳本將被解釋。

+0

你是一個拯救生命的人! 我想知道:爲什麼有些腳本不遵循這種做法?爲什麼我們必須編輯他們的源代碼來簡單地添加分號? – 2016-11-07 18:56:29

+0

@nik_m。我想知道爲什麼所有的連接工具都不會爲你添加這個。 – nicholaides 2016-12-04 21:14:29

0

我有同樣的問題。每次我想縮小我的JavaScript文件,包括幾個jquery插件,我得到一個錯誤。 首先,我嘗試用nicholaides在他上一篇文章中解釋的附加分號解決問題。即使有他的建議,我也無法設法在沒有錯誤的情況下縮小我的js文件。 之後,我改變了每一個jQuery插件中的以下行,併爲我工作; 例如:

(function($) { 
$.fn.defaultInputs = function(settings) { ... 

我已經簡化到

jQuery.fn.defaultInputs = function(settings) { ... 
相關問題