2013-03-31 30 views
7

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

  1. utils.js
  2. cơ sở-row.jas
  3. một row.js
  4. b-row.js
  5. my-table.js
  6. 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?

Trả lời

0

Giá trị mặc định cho findNestedDependencies tùy chọn trong tôi ưu hoa là "false", có nghĩa là ngay cả sau khi kịch bản được tối ưu hóa, vẫn còn có thể là một lồng nhau require hoặc define cuộc gọi mà sẽ đòi hỏi một bộ nạp mô-đun. Một bộ nạp cũng cần thiết cho các phụ thuộc bên ngoài. Tuy nhiên, tôi đồng ý rằng nếu findNestedDependencies được đặt thành "true" và không phụ thuộc bên ngoài là một phần của dự án, thì trình tối ưu hóa có thể xóa nhu cầu của nó cho trình tải.

-1

Bạn chỉ có thể bao gồm các tệp cần thiết trong tệp. Bạn có thể làm điều đó với một cuộc gọi getScript.

$.getScript("my_lovely_script.js", function(){ 

    //whatever you want here. 

}); 
Các vấn đề liên quan