Inspiré par les articles précédents, j'ai fait une copie de Rakefile et des répertoires des fournisseurs distribués avec WysiHat (un RTE mentionné par le changelog) et j'ai apporté quelques modifications pour inclure la vérification de code avec JSLint et la minification avec YUI Compressor .
L'idée est d'utiliser Sprockets (de WysiHat) pour fusionner plusieurs JavaScripts en un seul fichier, vérifier la syntaxe du fichier fusionné avec JSLint et le minimiser avec YUI Compressor avant la distribution.
Conditions préalables
- Java Runtime
- rubis et râteau gemme
- Vous devez savoir comment mettre un JAR dans Classpath
Maintenant
- Téléchargez Rhino et placez le JAR ("js.jar") dans votre chemin de classe
- Téléchargez YUI Compressor et placez le JAR (build / yuicompressor-xyz.jar) dans votre chemin de classe
- Téléchargez WysiHat et copiez le répertoire "vendeur" à la racine de votre projet JavaScript
- Téléchargez JSLint pour Rhino et placez-le dans le répertoire "vendeur"
Créez maintenant un fichier nommé "Rakefile" dans le répertoire racine du projet JavaScript et ajoutez-y 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 pouvoir utiliser les commandes suivantes dans votre console:
rake merge
- pour fusionner différents fichiers JavaScript en un seul
rake check
- pour vérifier la syntaxe de votre code (c'est la tâche par défaut , vous pouvez donc simplement taper rake
)
rake minify
- pour préparer une version minifiée de votre code JS
Fusion à la source
À l'aide de Sprockets, le pré-processeur JavaScript, vous pouvez inclure (ou require
) d'autres fichiers JavaScript. Utilisez la syntaxe suivante pour inclure d'autres scripts du fichier initial (nommé "main.js", mais vous pouvez changer cela dans le 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 alors...
Jetez un œil à Rakefile fourni avec WysiHat pour configurer les tests unitaires automatisés. Jolies choses :)
Et maintenant pour la réponse
Cela ne répond pas très bien à la question d'origine. Je le sais et je suis désolé, mais je l'ai posté ici parce que j'espère que cela pourrait être utile à quelqu'un d'autre pour organiser son désordre.
Mon approche du problème consiste à faire autant de modélisation orientée objet que possible et à séparer les implémentations dans différents fichiers. Ensuite, les gestionnaires doivent être aussi courts que possible. L'exemple avec List
singleton est également sympa.
Et les espaces de noms ... eh bien ils peuvent être imités par une structure d'objet plus profonde.
if (typeof org === 'undefined') {
var org = {};
}
if (!org.hasOwnProperty('example')) {
org.example = {};
}
org.example.AnotherObject = function () {
// constructor body
};
Je ne suis pas un grand fan d'imitations, mais cela peut être utile si vous avez de nombreux objets que vous souhaitez déplacer hors de la portée mondiale.