Inspiriert von früheren Beiträgen habe ich eine Kopie von Rakefile- und Vendor- Verzeichnissen erstellt, die mit WysiHat verteilt wurden (eine von Changelog erwähnte RTE), und einige Änderungen vorgenommen, um die Codeprüfung mit JSLint und die Minimierung mit YUI Compressor einzuschließen .
Die Idee ist, Sprockets (von WysiHat) zu verwenden, um mehrere JavaScripts in einer Datei zusammenzuführen, die Syntax der zusammengeführten Datei mit JSLint zu überprüfen und sie vor der Verteilung mit YUI Compressor zu minimieren.
Voraussetzungen
- java Laufzeit
- Rubin und Rechen Edelstein
- Sie sollten wissen, wie Sie eine JAR in Classpath einfügen
Mach jetzt
- Laden Sie Rhino herunter und legen Sie das JAR ("js.jar") in Ihren Klassenpfad
- Laden Sie YUI Compressor herunter und fügen Sie die JAR (build / yuicompressor-xyz.jar) in Ihren Klassenpfad ein
- Laden Sie WysiHat herunter und kopieren Sie das Verzeichnis "vendor" in das Stammverzeichnis Ihres JavaScript-Projekts
- Laden Sie JSLint for Rhino herunter und legen Sie es im Verzeichnis "vendor" ab
Erstellen Sie nun eine Datei mit dem Namen "Rakefile" im Stammverzeichnis des JavaScript-Projekts und fügen Sie den folgenden Inhalt hinzu:
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
Wenn Sie alles richtig gemacht haben, sollten Sie in der Lage sein, die folgenden Befehle in Ihrer Konsole zu verwenden:
rake merge
- um verschiedene JavaScript-Dateien zu einer zusammenzuführen
rake check
- um die Syntax Ihres Codes zu überprüfen (dies ist die Standardaufgabe , sodass Sie einfach eingeben können rake
)
rake minify
- um eine minimierte Version Ihres JS-Codes vorzubereiten
Beim Zusammenführen der Quelle
Mit Sprockets, dem JavaScript-Vorprozessor, können Sie require
andere JavaScript-Dateien einschließen (oder ). Verwenden Sie die folgende Syntax, um andere Skripte aus der ursprünglichen Datei (mit dem Namen "main.js", aber Sie können dies in der Rake-Datei ändern) einzuschließen:
(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
})();
Und dann...
Schauen Sie sich Rakefile an, das mit WysiHat geliefert wurde, um die automatisierten Unit-Tests einzurichten. Gutes Zeug :)
Und jetzt zur Antwort
Dies beantwortet die ursprüngliche Frage nicht sehr gut. Ich weiß es und es tut mir leid, aber ich habe es hier gepostet, weil ich hoffe, dass es für jemand anderen nützlich sein kann, sein Chaos zu organisieren.
Mein Ansatz für das Problem besteht darin, so viel objektorientierte Modellierung wie möglich durchzuführen und Implementierungen in verschiedene Dateien aufzuteilen. Dann sollten die Handler so kurz wie möglich sein. Das Beispiel mit List
Singleton ist auch schön.
Und Namespaces ... nun, sie können durch eine tiefere Objektstruktur imitiert werden.
if (typeof org === 'undefined') {
var org = {};
}
if (!org.hasOwnProperty('example')) {
org.example = {};
}
org.example.AnotherObject = function () {
// constructor body
};
Ich bin kein großer Fan von Imitationen, aber dies kann hilfreich sein, wenn Sie viele Objekte haben, die Sie aus dem globalen Bereich entfernen möchten.