Tôi đang viết jQuery plugin có chứa nhiều mã. Vì vậy, tôi quyết định tách mã và làm cho nó thêm mô-đun cho tôi (nhà phát triển). Đối với điều này tôi sử dụng require.js.
Bây giờ tôi có 6 js file:requirejs - kết hợp nhiều tệp vào tệp js duy nhất không phụ thuộc vào requirejs
- utils.js
- cơ sở-row.jas
- một row.js
- b-row.js
- my-table.js
- main.js
Tệp 1 đến 5 xác định JavaScript "lớp" và chúng có phụ thuộc giữa chính họ. Lớp "chính" hoạt động tất cả các buổi hòa nhạc là my-table.js. main.js có sự phụ thuộc duy nhất của tôi-table.js và tạo ra một plugin từ nó:
require([
'my-table'
], function(MyTable) {
jQuery.fn.myTable = function(options) {
var table = new MyTable(this, options);
this.data('myTable', table);
return this;
};
});
Bây giờ tôi muốn tạo ra từ các tập tin một file js lớn có chứa tất cả 6 tập tin mà không phụ thuộc bất kỳ (trừ jQuery mà người dùng nên đặt tham chiếu đến nó). Đối với điều này tôi đã sử dụng r.js (http://requirejs.org/docs/optimization.html) và kết quả là tôi có một tệp js lớn phụ thuộc vào require.js (và chứa các cuộc gọi để xác định và yêu cầu). Tôi đã theo dõi điều này: http://requirejs.org/docs/faq-optimization.html#wrap và sử dụng almond.js để kết hợp tất cả các tệp của tôi cho việc sử dụng không phụ thuộc vào require.js. Điều này hoạt động tốt.
Vấn đề là tại sao tôi cần tất cả các cuộc gọi phương thức xác định và yêu cầu và almond.js? Tại sao tôi ưu hoa không thể nối chỉ có kết quả chức năng (như mô tả trong câu hỏi này: Why do concatenated RequireJS AMD modules need a loader?) như thế này:
(function() {
var utils = «function() {
....
return Utils;
}»();
var baseRow = «function(A) {
....
return BaseRow;
}»(utils);
....
....
var myTable = .....
//<--This is require call and therefore doesn't return a thing
(function(MyTable) {
jQuery.fn.myTable = function(options) {
var table = new MyTable(this, options);
this.data('myTable', table);
return this;
};
})(myTable);
})();
Như một kết quả của quá trình này, tôi đã quyết định để kiểm tra những điều trên và kết hợp bằng tay tất cả các file một tệp được rút gọn. Tôi kết thúc với một tập tin nhỏ hơn 3k sau đó phiên bản hạnh nhân!
Tôi không tìm thấy logic đằng sau trình tối ưu hóa r.js tạo kết quả phụ thuộc require.js. Trong trường hợp của tôi, không ai cần sử dụng bất kỳ tệp nào, tệp js chính của tôi là người tiêu dùng duy nhất. Bạn nghĩ sao?