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 List
singleton 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.