Inspirado por los mensajes anteriores I hizo una copia de Rakefile y proveedor directorios distribuido con WysiHat (a RTE mencionado por cambios) e hizo algunas modificaciones para incluir código de comprobación con JSLint y minificación con YUI Compressor .
La idea es usar Sprockets (de WysiHat) para combinar múltiples JavaScripts en un solo archivo, verificar la sintaxis del archivo fusionado con JSLint y minificarlo con YUI Compressor antes de la distribución.
Requisitos previos
- de ejecución de Java
- rubí y el rastrillo joya
- Usted debe saber cómo poner un JAR en Classpath
Ahora haga
- Rhino Descargar y poner el JAR ("js.jar") a su ruta de clase
- Descargar YUI Compressor y poner el JAR (build/yuicompressor-xyz.jar) a su ruta de clase
- Descargar WysiHat y copiar "vendedor" directorio a la raíz del proyecto JavaScript
- Descargar JSLint for Rhino y ponerlo dentro del directorio "vendedor"
Ahora cree un archivo llamado "Rakefile" en el directorio raíz del proyecto de JavaScript y añadir el siguiente contenido a it:
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 hecho todo correctamente, usted debería ser capaz de utilizar los siguientes comandos en la consola:
rake merge
- fusionar diferentes archivos JavaScript en uno
rake check
- para comprobar la sintaxis de su código (esta es la tarea predeterminada , por lo que puede simplemente escribir rake
)
rake minify
- para preparar la versión reducida de su código JS
sobre la fuente de la fusión de
El uso de ruedas dentadas, el pre-procesador de JavaScript que puede incluir (o require
) otros archivos JavaScript. Utilice la siguiente sintaxis para incluir otras secuencias de comandos desde el archivo inicial (llamado "main.js", pero esto se puede cambiar 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 ...
Tome una mira Rakefile provisto con WysiHat para configurar las pruebas automatizadas de la unidad. Cosas bonitas :)
Y ahora para la respuesta
Esto no responde a la pregunta original muy bien. Lo sé y lo siento, pero lo publiqué aquí porque espero que pueda ser útil para otra persona organizar su desorden.
Mi enfoque al 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 bueno.
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 gran fan de imitaciones, pero esto puede ser útil si tiene muchos objetos que le gustaría a moverse fuera del ámbito global.
alguien que realmente se tomó el tiempo para hablar sobre la organización del código en sí, no "solo" qué herramienta usa para concatenar y comprimir sus archivos JS: http://stackoverflow.com/questions/16736483/best-way-to -organize-jquery-javascript-code-2013/16760577 # 16760577 –