Inspirado em posts anteriores, fiz uma cópia dos diretórios Rakefile e de fornecedores distribuídos com o WysiHat (um RTE mencionado pelo changelog) e fiz algumas modificações para incluir a verificação de código com JSLint e a minificação com o YUI Compressor .
A idéia é usar Sprockets (do WysiHat) para mesclar vários JavaScripts em um arquivo, verificar a sintaxe do arquivo mesclado com JSLint e reduzi-lo com o YUI Compressor antes da distribuição.
Pré-requisitos
- Java Runtime
- rubi e ancinho
- Você deve saber como colocar um JAR no Classpath
Agora faça
- Faça o download do Rhino e coloque o JAR ("js.jar") em seu caminho de classe
- Faça o download do YUI Compressor e coloque o JAR (build / yuicompressor-xyz.jar) em seu caminho de classe
- Faça o download do WysiHat e copie o diretório "vendor" para a raiz do seu projeto JavaScript
- Faça o download do JSLint for Rhino e coloque-o no diretório "vendor"
Agora crie um arquivo chamado "Rakefile" no diretório raiz do projeto JavaScript e adicione o seguinte conteúdo:
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
Se você fez tudo corretamente, poderá usar os seguintes comandos no console:
rake merge
- mesclar diferentes arquivos JavaScript em um
rake check
- para verificar a sintaxe do seu código (esta é a tarefa padrão , para que você possa simplesmente digitar rake
)
rake minify
- para preparar a versão minificada do seu código JS
Na fusão de origem
Usando o Sprockets, o pré-processador JavaScript, você pode incluir (ou require
) outros arquivos JavaScript. Use a seguinte sintaxe para incluir outros scripts do arquivo inicial (chamado "main.js", mas você pode alterar isso no 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
})();
E depois...
Dê uma olhada no Rakefile fornecido com o WysiHat para configurar os testes de unidade automatizados. Coisas legais :)
E agora a resposta
Isso não responde muito bem à pergunta original. Eu sei e sinto muito por isso, mas eu publiquei aqui porque espero que seja útil para outra pessoa organizar sua bagunça.
Minha abordagem para o problema é fazer o máximo possível de modelagem orientada a objetos e separar implementações em arquivos diferentes. Os manipuladores devem ser o mais curtos possível. O exemplo com List
singleton também é bom.
E espaços para nome ... bem, eles podem ser imitados por uma estrutura mais profunda de objetos.
if (typeof org === 'undefined') {
var org = {};
}
if (!org.hasOwnProperty('example')) {
org.example = {};
}
org.example.AnotherObject = function () {
// constructor body
};
Não sou muito fã de imitações, mas isso pode ser útil se você tiver muitos objetos que gostaria de sair do escopo global.