以前私がコピーしたポストに触発Rakefileとベンダーと分散ディレクトリWysiHat(RTEは、変更ログが言及)及びコードチェックに含めるいくつかの変更を行っJSLint有すると縮小YUIコンプレッサー。
アイデアは、Sprockets(WysiHatから)を使用して複数のJavaScriptを1つのファイルにマージし、マージされたファイルの構文をJSLintで確認して、配布前にYUI Compressorで縮小することです。
前提条件
- Javaランタイム
- ルビーとレーキの宝石
- JARをクラスパスに配置する方法を知っている必要があります。
さあ
- Rhinoをダウンロードし、JAR( "js.jar")をクラスパスに配置します
- YUI Compressorをダウンロードし、JAR(build / yuicompressor-xyz.jar)をクラスパスに配置します。
- WysiHatをダウンロードし、「vendor」ディレクトリをJavaScriptプロジェクトのルートにコピーします
- JSLint for Rhinoをダウンロードして、「vendor」ディレクトリに配置します
次に、JavaScriptプロジェクトのルートディレクトリに「Rakefile」という名前のファイルを作成し、次のコンテンツを追加します。
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ファイルを1つにマージする
rake check
-コードの構文をチェックします(これはデフォルトのタスクなので、単に入力できますrake
)
rake minify
-JSコードの縮小バージョンを準備する
ソースのマージについて
Sprocketsを使用すると、require
他のJavaScriptファイルをインクルード(または)できる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
})();
その後...
WysiHatに付属のRakefileを見て、自動化された単体テストをセットアップしてください。いい従業員 :)
そして今、答えのために
これは元の質問にあまりよく答えません。知って申し訳ありませんが、他の誰かが混乱を整理するのに役立つと思いますので、ここに投稿しました。
この問題に対する私のアプローチは、可能な限り多くのオブジェクト指向モデリングを行い、実装を異なるファイルに分離することです。その場合、ハンドラーは可能な限り短くする必要があります。List
シングルトンの例もいい例です。
そして名前空間...まあ、より深いオブジェクト構造によって模倣することができます。
if (typeof org === 'undefined') {
var org = {};
}
if (!org.hasOwnProperty('example')) {
org.example = {};
}
org.example.AnotherObject = function () {
// constructor body
};
私は模造品の大ファンではありませんが、グローバルスコープの外に移動したいオブジェクトがたくさんある場合に役立ちます。