Натхненний попередніми повідомленнями, я зробив копію каталогів Rakefile та постачальників, розповсюджених за допомогою WysiHat (RTE, згаданий змінним журналом), і зробив декілька модифікацій, щоб включити перевірку коду за допомогою JSLint та мінімізацію з YUI Compressor .
Ідея полягає в тому , щоб використовувати Зірочки (від WysiHat) , щоб об'єднати кілька JavaScripts в один файл, перевірте синтаксис об'єднаного файлу з JSLint і применшувати його з YUI Compressor перед розподілом.
Передумови
- Час виконання Java
- коштовний камінь з рубіном і граблями
- Ви повинні знати, як ввести JAR в Classpath
Тепер зробіть
- Завантажте Rhino і поставте JAR ("js.jar") на свій класний шлях
- Завантажте компресор YUI і поставте JAR (build / yuicompressor-xyz.jar) на свій класний шлях
- Завантажте WysiHat і скопіюйте каталог "постачальник" у корінь вашого JavaScript-проекту
- Завантажте JSLint для Rhino та покладіть його у каталог "постачальника"
Тепер створіть файл з назвою "Rakefile" у кореневій каталозі проекту JavaScript та додайте до нього такий вміст:
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
Якщо ви все зробили правильно, ви повинні мати можливість використовувати наступні команди у своїй консолі:
rake merge
- об'єднати різні файли JavaScript в один
rake check
- перевірити синтаксис свого коду (це завдання за замовчуванням , тому ви можете просто ввести rake
)
rake minify
- підготувати мінімізовану версію свого JS-коду
На злиття джерела
Використовуючи зірочки, попередній процесор JavaScript, ви можете включати (або require
) інші файли JavaScript. Використовуйте такий синтаксис, щоб включити інші сценарії з початкового файлу (з назвою "main.js", але ви можете змінити це в 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
})();
І потім...
Погляньте на Rakefile, який постачається з WysiHat, щоб налаштувати тестування автоматизованого блоку. Приємні речі :)
А тепер для відповіді
Це не дуже добре відповідає на початкове запитання. Я знаю і мені про це шкода, але я розмістив це тут, тому що сподіваюся, що хтось інший може бути корисним для організації їхнього безладу.
Мій підхід до проблеми полягає в тому, щоб зробити якомога більше об'єктно-орієнтованого моделювання та розділити реалізацію на різні файли. Тоді обробники повинні бути якомога коротшими. Приклад із List
синглтоном також приємний.
І простори імен ... ну вони можуть бути імітовані глибшою структурою об'єкта.
if (typeof org === 'undefined') {
var org = {};
}
if (!org.hasOwnProperty('example')) {
org.example = {};
}
org.example.AnotherObject = function () {
// constructor body
};
Я не великий прихильник наслідувань, але це може бути корисно, якщо у вас є багато об'єктів, які ви хотіли б вийти з глобальної сфери.