Lấy cảm hứng từ các bài đăng trước đó, tôi đã tạo một bản sao của Rakefile và các thư mục nhà cung cấp được phân phối với WysiHat (một RTE được đề cập bởi changelog) và thực hiện một vài sửa đổi để bao gồm kiểm tra mã với JSLint và thu nhỏ bằng YUI Compressor .
Ý tưởng là sử dụng Sprockets (từ WysiHat) để hợp nhất nhiều JavaScripts vào một tệp, kiểm tra cú pháp của tệp được hợp nhất với JSLint và rút gọn nó với YUI Compressor trước khi phân phối.
Điều kiện tiên quyết
- thời gian chạy Java
- đá quý ruby và cào
- Bạn nên biết cách đặt JAR vào Classpath
Bây giờ làm
- Tải về tê giác và đặt JAR ("js.jar") vào đường dẫn lớp của bạn
- Tải xuống máy nén YUI và đặt JAR (build / yuicompressor-xyz.jar) vào đường dẫn lớp của bạn
- Tải xuống WysiHat và sao chép thư mục "nhà cung cấp" vào thư mục gốc của dự án JavaScript của bạn
- Tải xuống JSLint cho Rhino và đặt nó vào thư mục "nhà cung cấp"
Bây giờ hãy tạo một tệp có tên "Rakefile" trong thư mục gốc của dự án JavaScript và thêm nội dung sau vào đó:
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
Nếu bạn thực hiện mọi thứ chính xác, bạn sẽ có thể sử dụng các lệnh sau trong bảng điều khiển của mình:
rake merge
- để hợp nhất các tệp JavaScript khác nhau thành một
rake check
- để kiểm tra cú pháp mã của bạn (đây là tác vụ mặc định , vì vậy bạn chỉ cần gõ rake
)
rake minify
- để chuẩn bị phiên bản rút gọn của mã JS của bạn
Về việc hợp nhất nguồn
Sử dụng Sprockets, bộ xử lý trước JavaScript bạn có thể bao gồm (hoặc require
) các tệp JavaScript khác. Sử dụng cú pháp sau để bao gồm các tập lệnh khác từ tệp ban đầu (được đặt tên là "main.js", nhưng bạn có thể thay đổi tập lệnh đó trong 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
})();
Và sau đó...
Hãy xem Rakefile được cung cấp với WysiHat để thiết lập thử nghiệm đơn vị tự động. Dụng cụ tốt :)
Và bây giờ cho câu trả lời
Điều này không trả lời tốt câu hỏi ban đầu. Tôi biết và tôi xin lỗi về điều đó, nhưng tôi đã đăng nó ở đây vì tôi hy vọng nó có thể hữu ích cho người khác để tổ chức mớ hỗn độn của họ.
Cách tiếp cận vấn đề của tôi là thực hiện càng nhiều mô hình hướng đối tượng mà tôi có thể và tách các triển khai thành các tệp khác nhau. Sau đó, các xử lý nên càng ngắn càng tốt. Ví dụ với List
singleton cũng tốt.
Và không gian tên ... chúng có thể được mô phỏng theo cấu trúc đối tượng sâu hơn.
if (typeof org === 'undefined') {
var org = {};
}
if (!org.hasOwnProperty('example')) {
org.example = {};
}
org.example.AnotherObject = function () {
// constructor body
};
Tôi không phải là fan hâm mộ lớn của hàng nhái, nhưng điều này có thể hữu ích nếu bạn có nhiều đối tượng mà bạn muốn chuyển ra khỏi phạm vi toàn cầu.