Ispirato da post precedenti ho fatto una copia di Rakefile e vendor directory distribuiti con WysiHat (un RTE menzionato da changelog) e ha fatto un paio di modifiche per includere il codice-controllo con JSLint e minification con YUI Compressor .
L'idea è di usare Sprockets (da WysiHat) per unire più JavaScript in un unico file, verificare la sintassi del file unito con JSLint e minimizzarlo con YUI Compressor prima della distribuzione.
Prerequisiti
- Java Runtime
- gemma rubino e rastrello
- Dovresti sapere come inserire un JAR in Classpath
Adesso fallo
- Scarica Rhino e inserisci il JAR ("js.jar") nel tuo percorso di classe
- Scarica YUI Compressor e inserisci il JAR (build / yuicompressor-xyz.jar) nel tuo percorso di classe
- Scarica WysiHat e copia la directory "vendor" nella radice del tuo progetto JavaScript
- Scarica JSLint per Rhino e inseriscilo nella directory "vendor"
Ora crea un file chiamato "Rakefile" nella directory principale del progetto JavaScript e aggiungi il seguente contenuto:
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
Se hai fatto tutto correttamente, dovresti essere in grado di utilizzare i seguenti comandi nella tua console:
rake merge
- per unire diversi file JavaScript in uno solo
rake check
- per verificare la sintassi del codice (questa è l' attività predefinita , quindi puoi semplicemente digitare rake
)
rake minify
- per preparare la versione ridotta del tuo codice JS
Unione alla fonte
Utilizzando Sprockets, il pre-processore JavaScript è possibile includere (o require
) altri file JavaScript. Utilizzare la sintassi seguente per includere altri script dal file iniziale (denominato "main.js", ma è possibile modificarlo nel 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
})();
E poi...
Dai un'occhiata a Rakefile fornito con WysiHat per configurare il test automatico dell'unità. Bella roba :)
E ora per la risposta
Questo non risponde molto bene alla domanda originale. Lo so e mi dispiace, ma l'ho pubblicato qui perché spero che possa essere utile a qualcun altro organizzare il loro pasticcio.
Il mio approccio al problema è quello di fare quanta più modellazione orientata agli oggetti possibile e separare le implementazioni in diversi file. Quindi i gestori dovrebbero essere il più corti possibile. Anche l'esempio con List
singleton è bello.
E gli spazi dei nomi ... beh, possono essere imitati da una struttura di oggetti più profonda.
if (typeof org === 'undefined') {
var org = {};
}
if (!org.hasOwnProperty('example')) {
org.example = {};
}
org.example.AnotherObject = function () {
// constructor body
};
Non sono un grande fan delle imitazioni, ma questo può essere utile se hai molti oggetti che vorresti spostare fuori dall'ambito globale.