2009-11-17 17 views
5

2000+ javascript satırlarımı sıkıştırmak istiyorum ve hem http://dean.edwards.name/packer/ hem de http://closure-compiler.appspot.com/home numaralarını test ettik.JavaScript, scriptimi sıkıştırdığım zaman çalışmayı durdurdu

Ancak her iki durumda da sıkıştırılmış komut dosyası bana hatalar veriyor. Bir hata örneği jQuery(document).Da is not a function.

Neden komut dizilimim optimizasyondan sonra çalışmıyor? Ve betiğimi optimize etmek/sıkıştırmak için ne yapabilirim?

+0

için basitleştirilmiş var. –

+0

Senaryonuz boyunca yarı virgül kullandınız mı? –

+0

JSLint, JS'nizle ilgili sorunları bulmanıza yardımcı olacaktır: http://www.jslint.com/ –

cevap

3

Çevrimiçi bir YUI Kompresörü deneyebilirsiniz. Bu, ilk sonuç olan google: http://www.refresh-sf.com/yui/

+0

Çalıştığınız için teşekkürler. Sonradan kodu zorla daraltmak olsa bile sıkıştırmayı öldürür :( – Steven

+0

Bu siteyi kullanarak şaşkınlığı test ettim: http://www.javascriptobfuscator.com/Default.aspx – Steven

+0

YUI kompresörünü kullansanız bile, bu problemle karşılaşabilirsiniz. Benim yaptığım gibi, noktalı virgüllerle ilgili cevabımı görün.Çünkü kullandığınız aleti değiştirmek sadece dosyaları yeniden düzenliyor olabilir ve bu problemi gizleyecektir, ancak YUI kompresörünü çalıştırdığınızda bir kez daha kırpabilirsiniz: – nicholaides

6

Her JavaScript dosyasının başında bir noktalı virgül olduğundan emin olun. Tuhaf, biliyorum, ama neden burada:

tek bir dosyada böyle bir şey olabilir:

function someFunc() { 
    ... 
} 

(birçok jQuery eklentileri nasıl görüneceğini budur) aşağıdaki dosyada böyle bir şey ardından:

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

esasen 0 çağırır hangisi: Bu içine sıkıştırılmış olur

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

Argüman olarak function($){...} ile. Sonra, geri gönderilen her şeyi alır ve bir işlev olduğunu varsayar ve argüman olarak jQuery ile çağırır.

Bu nedenle jQuery eklentilerinin çoğu, ;(function($){ ile başlar. amaçlandığı gibi

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

Bu şekilde, komut yorumlanacaktır:

her dosyanın başında noktalı virgül koyarak

(veya sonuna, ancak tutarlı olun) Senaryonuzu yapacak benziyor.

+0

Hayat kurtarıcı sizsiniz! Merak ediyorum: Neden bazı scriptler bu uygulamayı takip etmiyor? Neden kaynak kodlarını sadece bir noktalı virgül eklemek için düzenlemeliyiz? –

+0

@nik_m. Tüm birleştirici araçların sizin için neden eklemediğini merak ediyorum. – nicholaides

0

Aynı sorunları yaşadım. her javascript-dosyaları bir jQuery-plugins dahil olmak üzere minimize etmek istedim bir hata aldım. önce son yazısında açıklanan nicholaides olarak addional semicolons ile sorunları çözmeye çalıştım. onun tavsiyesi ile bile js dosyamı hatasız bir şekilde küçültmeyi başaramadım. bundan sonra her jquery-plugin'de aşağıdaki satırı değiştirdim ve benim için çalıştım; Örneğin :

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

i ihlalinde bulunan kod parçacığını göndermeden bir cevap alırsınız sanmıyorum

jQuery.fn.defaultInputs = function(settings) { ... 
İlgili konular