Zainspirowany wcześniejszymi postami, zrobiłem kopię katalogu Rakefile i katalogów dostawców dystrybuowanych wraz z WysiHat (RTE wspomnianym przez dziennik zmian) i wprowadziłem kilka modyfikacji w celu włączenia sprawdzania kodu za pomocą JSLint i minimalizacji za pomocą YUI Compressor .
Chodzi o to, aby użyć Sprockets (z WysiHat) do scalenia wielu skryptów JavaScript w jeden plik, sprawdzenia składni scalonego pliku za pomocą JSLint i zminimalizowania go za pomocą YUI Compressor przed dystrybucją.
Wymagania wstępne
- Środowisko wykonawcze Java
- klejnot ruby i prowizji
- Powinieneś wiedzieć, jak umieścić JAR w Classpath
Teraz zrób
- Pobieranie Rhino i umieść JAR („js.jar”) w ścieżce klasy
- Pobieranie kompresor YUI i umieść JAR (build / yuicompressor-xyz.jar) w ścieżce klasy
- Pobieranie WysiHat i skopiuj katalog „vendor” do katalogu głównego projektu JavaScript
- Pobierz JSLint dla Rhino i umieść go w katalogu „vendor”
Teraz utwórz plik o nazwie „Rakefile” w katalogu głównym projektu JavaScript i dodaj do niego następującą treść:
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
Jeśli wszystko wykonałeś poprawnie, powinieneś być w stanie użyć następujących poleceń w konsoli:
rake merge
- aby połączyć różne pliki JavaScript w jeden
rake check
- aby sprawdzić składnię kodu (jest to zadanie domyślne , więc możesz po prostu pisać rake
)
rake minify
- w celu przygotowania zminimalizowanej wersji kodu JS
Po scaleniu źródła
Za pomocą Sprockets, preprocesora JavaScript, możesz dołączyć (lub require
) inne pliki JavaScript. Użyj następującej składni, aby dołączyć inne skrypty z pliku początkowego (o nazwie „main.js”, ale możesz to zmienić w pliku 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
})();
I wtedy...
Spójrz na Rakefile dostarczony z WysiHat, aby skonfigurować automatyczne testowanie jednostek. Fajne rzeczy :)
A teraz odpowiedź
To nie odpowiada zbyt dobrze na pierwotne pytanie. Wiem i przykro mi z tego powodu, ale opublikowałem to tutaj, ponieważ mam nadzieję, że może być przydatne dla kogoś innego, aby zorganizować swój bałagan.
Moje podejście do problemu polega na tym, aby wykonać jak najwięcej modelowania obiektowego i rozdzielić implementacje na różne pliki. W takim przypadku przewodnicy powinni być jak najkrótsi. Przykład z List
singletonem jest również fajny.
I przestrzenie nazw ... cóż, można je naśladować głębszą strukturą obiektu.
if (typeof org === 'undefined') {
var org = {};
}
if (!org.hasOwnProperty('example')) {
org.example = {};
}
org.example.AnotherObject = function () {
// constructor body
};
Nie jestem wielkim fanem imitacji, ale może to być pomocne, jeśli masz wiele obiektów, które chciałbyś przenieść poza globalny zasięg.