Daha önceki yayınlardan esinlenerek WysiHat (changelog tarafından bahsedilen bir RTE) ile dağıtılan Rakefile ve satıcı dizinlerinin bir kopyasını yaptım ve JSLint ile kod kontrolünü ve YUI Kompresörü ile küçültmeyi içeren birkaç değişiklik yaptım .
Fikir, birden fazla JavaScripts'i tek bir dosyada birleştirmek için Sprockets (WysiHat'tan) kullanmak, birleştirilmiş dosyanın JSLint ile sözdizimini kontrol etmek ve dağıtımdan önce YUI Kompresörü ile küçültmektir.
Ön şartlar
- Java Çalışma Zamanı
- yakut ve komisyon mücevher
- Sınıf yoluna nasıl bir JAR koyacağınızı bilmelisiniz
Şimdi yap
- Rhino'yu indir ve sınıf yoluna JAR ("js.jar") koy
- YUI Kompresörünü indirin ve JAR'ı (build / yuicompressor-xyz.jar) sınıf yolunuza koyun
- WysiHat'ı indirin ve "vendor" dizinini JavaScript projenizin kök dizinine kopyalayın
- Rhino için JSLint'i indirin ve "satıcı" dizinine koyun
Şimdi JavaScript projesinin kök dizininde "Rakefile" adlı bir dosya oluşturun ve bu dosyaya aşağıdaki içeriği ekleyin:
require 'rake'
ROOT = File.expand_path(File.dirname(__FILE__))
OUTPUT_MERGED = "final.js"
OUTPUT_MINIFIED = "final.min.js"
task :default => :check
desc "Merges the JavaScript sources."
task :merge do
require File.join(ROOT, "vendor", "sprockets")
environment = Sprockets::Environment.new(".")
preprocessor = Sprockets::Preprocessor.new(environment)
%w(main.js).each do |filename|
pathname = environment.find(filename)
preprocessor.require(pathname.source_file)
end
output = preprocessor.output_file
File.open(File.join(ROOT, OUTPUT_MERGED), 'w') { |f| f.write(output) }
end
desc "Check the JavaScript source with JSLint."
task :check => [:merge] do
jslint_path = File.join(ROOT, "vendor", "jslint.js")
sh 'java', 'org.mozilla.javascript.tools.shell.Main',
jslint_path, OUTPUT_MERGED
end
desc "Minifies the JavaScript source."
task :minify => [:merge] do
sh 'java', 'com.yahoo.platform.yui.compressor.Bootstrap', '-v',
OUTPUT_MERGED, '-o', OUTPUT_MINIFIED
end
Her şeyi doğru bir şekilde yaptıysanız, konsolunuzda aşağıdaki komutları kullanabilmeniz gerekir:
rake merge
- farklı JavaScript dosyalarını tek bir dosyada birleştirmek için
rake check
- kodunuzun sözdizimini kontrol etmek için (bu varsayılan görevdir, böylece yazabilirsiniz rake
)
rake minify
- JS kodunuzun küçültülmüş bir versiyonunu hazırlamak için
Kaynak birleştirmede
Sprockets kullanarak, require
diğer JavaScript dosyalarını ekleyebileceğiniz (veya ) JavaScript ön işlemcisi . İlk dosyadaki diğer komut dosyalarını ("main.js" olarak adlandırılır) eklemek için aşağıdaki sözdizimini kullanın, ancak bunu Rakefile'da değiştirebilirsiniz:
(function() {
//= require "subdir/jsfile.js"
//= require "anotherfile.js"
// some code that depends on included files
// note that all included files can be in the same private scope
})();
Ve sonra...
Otomatik birim testini ayarlamak için WysiHat ile sağlanan Rakefile'a göz atın. Güzel iş :)
Ve şimdi cevap için
Bu orijinal soruyu çok iyi cevaplamıyor. Biliyorum ve bunun için üzgünüm, ama buraya gönderdim çünkü umarım birilerinin karışıklıklarını düzenlemesi yararlı olabilir.
Soruna yaklaşımım, yapabildiğim kadar nesne yönelimli modelleme yapmak ve uygulamaları farklı dosyalara ayırmaktır. Ardından işleyiciler mümkün olduğunca kısa olmalıdır. List
Singleton ile örnek de güzel bir örnek.
Ve isim alanları ... daha derin nesne yapısı ile taklit edilebilirler.
if (typeof org === 'undefined') {
var org = {};
}
if (!org.hasOwnProperty('example')) {
org.example = {};
}
org.example.AnotherObject = function () {
// constructor body
};
Ben büyük taklit hayranı değilim, ama küresel kapsamı dışına taşımak istediğiniz birçok nesne varsa bu yararlı olabilir.