Terinspirasi oleh posting sebelumnya saya membuat salinan Rakefile dan direktori vendor yang didistribusikan dengan WysiHat (RTE yang disebutkan oleh changelog) dan membuat beberapa modifikasi untuk memasukkan pengecekan kode dengan JSLint dan minifikasi dengan YUI Compressor .
Idenya adalah untuk menggunakan Sprockets (dari WysiHat) untuk menggabungkan beberapa JavaScripts menjadi satu file, periksa sintaksis file yang digabungkan dengan JSLint dan minify dengan YUI Compressor sebelum didistribusikan.
Prasyarat
- Java Runtime
- permata ruby dan rake
- Anda harus tahu cara memasukkan JAR ke dalam Classpath
Sekarang lakukan
- Unduh Badak dan masukkan JAR ("js.jar") ke classpath Anda
- Unduh YUI Compressor dan masukkan JAR (build / yuicompressor-xyz.jar) ke classpath Anda
- Unduh WysiHat dan salin direktori "vendor" ke root proyek JavaScript Anda
- Unduh JSLint untuk Rhino dan letakkan di dalam direktori "vendor"
Sekarang buat file bernama "Rakefile" di direktori root proyek JavaScript dan tambahkan konten berikut ke dalamnya:
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
Jika Anda melakukan semuanya dengan benar, Anda harus dapat menggunakan perintah berikut di konsol Anda:
rake merge
- untuk menggabungkan berbagai file JavaScript menjadi satu
rake check
- untuk memeriksa sintaks kode Anda (ini adalah tugas default , jadi Anda cukup mengetikrake
)
rake minify
- untuk menyiapkan versi minify dari kode JS Anda
Penggabungan sumber
Menggunakan Sprockets, pre-prosesor JavaScript yang dapat Anda sertakan (atau require
) file JavaScript lainnya. Gunakan sintaks berikut untuk memasukkan skrip lain dari file awal (bernama "main.js", tetapi Anda bisa mengubahnya di Rakefile):
(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
})();
Lalu...
Lihatlah Rakefile yang disediakan dengan WysiHat untuk mengatur pengujian unit otomatis. Barang bagus :)
Dan sekarang untuk jawabannya
Ini tidak menjawab pertanyaan asli dengan sangat baik. Saya tahu dan saya minta maaf tentang hal itu, tetapi saya telah mempostingnya di sini karena saya berharap semoga bermanfaat bagi orang lain untuk mengatur kekacauan mereka.
Pendekatan saya terhadap masalah ini adalah melakukan sebanyak mungkin pemodelan berorientasi objek dan memisahkan implementasi ke dalam file yang berbeda. Maka pawang harus sesingkat mungkin. Contoh dengan List
singleton juga bagus.
Dan ruang nama ... yah mereka bisa ditiru oleh struktur objek yang lebih dalam.
if (typeof org === 'undefined') {
var org = {};
}
if (!org.hasOwnProperty('example')) {
org.example = {};
}
org.example.AnotherObject = function () {
// constructor body
};
Saya bukan penggemar imitasi, tetapi ini bisa membantu jika Anda memiliki banyak objek yang ingin Anda pindah dari ruang lingkup global.