Inspiré par les anciens messages, j'ai fait une copie de Rakefile et fournisseur annuaires distribués avec WysiHat (RTE mentionné par changelog) et a fait quelques modifications pour inclure le code de vérification avec JSLint et minification avec YUI Compressor.
L'idée est d'utiliser des Pignons (à partir de WysiHat) de fusionner plusieurs fichiers Javascript en un seul fichier, vérifier la syntaxe du fichier fusionné avec JSLint et rapetisser avec YUI Compressor, avant la distribution.
Conditions préalables
- Java Runtime
- le rubis et le râteau gem
- Vous devez savoir comment mettre un JAR dans le Classpath
Maintenant, ne
- Téléchargement Rhino et mettre le POT ("js.jar") à votre classpath
- Télécharger YUI Compressor, et mettre le POT (build/yuicompressor-xyz.jar à votre classpath
- Télécharger WysiHat et la copie "vendeur" répertoire à la racine de votre projet JavaScript
- Télécharger JSLint pour Rhino et le mettre à l'intérieur le "vendeur" répertoire
Maintenant, créez un fichier nommé "Rakefile" dans le répertoire racine du projet JavaScript et ajoutez le contenu suivant:
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 vous avez tout fait correctement, vous devriez être en mesure d'utiliser les commandes suivantes dans la console:
-
rake merge
-- à la fusion de différents fichiers JavaScript en un seul
-
rake check
-- pour vérifier la syntaxe de votre code (c'est la valeur par défaut de la tâche, de sorte que vous pouvez simplement taper rake
)
-
rake minify
-- pour préparer version minifiée de votre code JS
Sur la source de la fusion
À l'aide de Pignons, le JavaScript pré-processeur, vous pouvez inclure (ou require
) autres fichiers JavaScript. Utilisez la syntaxe suivante pour inclure d'autres scripts à partir de l'initiale du fichier (nommé "main.js" mais vous pouvez changer cela dans la 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
})();
Et puis...
Jetez un oeil à Rakefile fourni avec WysiHat pour définir les tests unitaires automatisés. Sympa tout ça :)
Et maintenant pour la réponse
Cela ne répond pas à la question d'origine très bien. Je sais et j'en suis désolé, mais j'ai posté ici parce que, je l'espère, il peut être utile à quelqu'un d'autre pour organiser leur désordre.
Mon approche du problème est de faire autant de l'objet-modélisation orientée que je peux et implémentations séparées en différents fichiers. Ensuite, les gestionnaires doivent être aussi courts que possible. L'exemple avec List
singleton est aussi une belle.
Et les espaces de noms... eh bien, ils peuvent être imité par les plus profondes de la structure de l'objet.
if (typeof org !== 'undefined') {
var org = {};
}
if (!org.hasOwnProperty('example')) {
org.example = {};
}
org.example.AnotherObject = function () {
// constructor body
};
Je ne suis pas grand fan des imitations, mais cela peut être utile si vous avez beaucoup d'objets que vous souhaitez déplacer hors de la portée globale.