Inspirado en publicaciones anteriores, hice una copia de Rakefile y directorios de proveedores distribuidos con WysiHat (un RTE mencionado por changelog) e hice algunas modificaciones para incluir la verificación de código con JSLint y la minificación con YUI Compressor .
La idea es usar Sprockets (de WysiHat) para fusionar múltiples JavaScripts en un solo archivo, verificar la sintaxis del archivo combinado con JSLint y minimizarlo con YUI Compressor antes de la distribución.
Prerrequisitos
- Java Runtime
- gema de rubí y rastrillo
- Debe saber cómo poner un JAR en Classpath
Ahora haz
- Descargue Rhino y coloque el JAR ("js.jar") en su classpath
- Descargue YUI Compressor y coloque el JAR (build / yuicompressor-xyz.jar) en su classpath
- Descargue WysiHat y copie el directorio "vendor" en la raíz de su proyecto de JavaScript
- Descargue JSLint para Rhino y póngalo dentro del directorio "vendor"
Ahora cree un archivo llamado "Rakefile" en el directorio raíz del proyecto JavaScript y agregue el siguiente contenido:
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
Si hizo todo correctamente, debería poder usar los siguientes comandos en su consola:
rake merge - para combinar diferentes archivos JavaScript en uno
rake check- para verificar la sintaxis de su código (esta es la tarea predeterminada , por lo que simplemente puede escribir rake)
rake minify - para preparar una versión reducida de su código JS
En fusión de fuente
Usando Sprockets, el preprocesador de JavaScript puede incluir (u require) otros archivos JavaScript. Use la siguiente sintaxis para incluir otros scripts del archivo inicial (llamado "main.js", pero puede cambiar eso en el 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
})();
Y entonces...
Eche un vistazo a Rakefile proporcionado con WysiHat para configurar la unidad automatizada de pruebas. Lindas cosas :)
Y ahora por la respuesta
Esto no responde muy bien la pregunta original. Lo sé y lo siento, pero lo he publicado aquí porque espero que pueda ser útil para que otra persona organice su desorden.
Mi enfoque del problema es hacer todo el modelado orientado a objetos que pueda y separar las implementaciones en diferentes archivos. Entonces los manejadores deben ser lo más cortos posible. El ejemplo con Listsingleton también es agradable.
Y espacios de nombres ... bueno, pueden ser imitados por una estructura de objetos más profunda.
if (typeof org === 'undefined') {
var org = {};
}
if (!org.hasOwnProperty('example')) {
org.example = {};
}
org.example.AnotherObject = function () {
// constructor body
};
No soy un gran admirador de las imitaciones, pero esto puede ser útil si tiene muchos objetos que le gustaría mover fuera del alcance global.