2013-07-19 24 views
9

Có thể đặt phụ thuộc cho toàn bộ thư mục bằng cách sử dụng require.js không?Có thể đặt phụ thuộc cho một thư mục bằng require.js không?

Tôi biết rằng bạn có thể sử dụng cấu hình shim để thiết lập phụ thuộc cho một tập tin:

require.config({ 
    shim: { 
     'plugin/backbone/xyz': { 
      deps: ['lib/backbone'], 
      exports: 'Backbone' 
     } 
    } 
}); 

Trong ví dụ trên, chúng tôi xác định sự phụ thuộc cho xương sống plugin/xyz, nhưng tôi muốn xác định sự phụ thuộc cho tất cả các plugin xương sống:

require.config({ 
    shim: { 
     'plugin/backbone/': { // I would like to specify a folder here but it doesn't work. 
      deps: ['lib/backbone'], 
      exports: 'Backbone' 
     } 
    } 
}); 

tôi nghĩ rằng tôi đã từng tìm thấy một ý chính về nó trên GitHub, nhưng tôi dường như không thể tìm thấy nó một lần nữa.


Để làm rõ: Đây không phải là về đòi hỏi toàn bộ thư mục, nhưng thiết phụ thuộc cho nó - Có gì tất cả các file trong thư mục cần trước khi họ đã sẵn sàng để khởi tạo, mỗi và một trong số họ. Nó sẽ được thực hiện bằng cách thêm miếng chêm cho tất cả các tập tin, nhưng tôi muốn chỉ cần thêm shim rằng một lần cho toàn bộ thư mục:

shim: { 
    'lib/backbone': { 
     exports: 'Backbone' // <- No use of .noConflict() so all plugins can be required and export Backbone as well. 
    }, 
    'plugin/backbone/a': { 
     deps: ['lib/backbone'], // <- Require backbone 
     exports: 'Backbone' // <- Export backbone 
    }, 
    // Same requirement and folder for these files: 
    'plugin/backbone/b': { 
     deps: ['lib/backbone'], 
     exports: 'Backbone' 
    }, 
    'plugin/backbone/c': { 
     deps: ['lib/backbone'], 
     exports: 'Backbone' 
    } 
} 
+0

Đây sẽ là một tính năng tuyệt vời. Đặc biệt là nếu tôi đang sử dụng một cái gì đó như Angular, trong đó có tấn bộ điều khiển, dịch vụ, vv Sẽ là tuyệt vời để chỉ nói "ứng dụng" thư mục của tôi phụ thuộc vào góc. –

Trả lời

2

Không, bạn không thể dễ dàng tạo ra một ký tự đại diện để thêm phụ thuộc vào tất cả các file dưới một thư mục từ chính cấu hình. Tuy nhiên, bạn có thể tạo vòng lặp trước cấu hình và thêm bất kỳ phụ thuộc nào bạn muốn.

var config = { 
    shim: { 
     'plugin/backbone/xyz': { 
      deps: ['lib/dependency'], 
      exports: 'Backbone' 
     } 
    } 
}; 
for(var shim in config.shim) { 
    if(shim.indexOf('plugin/backbone/') == 0) { 
     if(config.shim[shim].deps == null) { 
      config.shim[shim].deps = []; 
     } 
     config.shim[shim].deps.push('lib/backbone'); 
    } 
} 
require.config(config); 

Đây là cách duy nhất tôi có thể nghĩ mà không phải tự mình ghi đè lên một trong các chức năng của yêu cầu. Không tao nhã, tôi sẽ thừa nhận, nhưng nó sẽ thực hiện công việc.

+0

Bạn nên xóa 'each' sau' for': 'cho (var shim trong config.shim) {}' – andlrc

+0

Ah, xin lỗi, đang nghĩ đến ActionScript. Đã sửa. –

1

Lấy cảm hứng từ @J_A_X's answer

Bạn có thể thực hiện một loạt các file mà nên chia sẻ sự phụ thuộc tương tự và tạo ra các shim động:

var config = { shim: { /*...*/ } } 

var plugins = ['a', 'b', 'c', 'd'], 
    plugin_shim = { 
     deps: ['lib/backbone'], 
     exports: 'Backbone' 
    }; 

plugins.forEach(function(file) { 
    config.shim['plugin/backbone/' + file] = plugin_shim; 
}); 

require.config(config); 

Nhưng điều này sẽ không làm việc rất tốt nếu ai đó sẽ minuglify sử dụng r.js

Các vấn đề liên quan