2013-07-19 22 views
9

Czy można ustawić zależności dla całego folderu za pomocą require.js?Czy można ustawić zależności dla folderu za pomocą require.js?

wiem, że można użyć konfiguracji podkładkę do ustawiania zależności dla pliku:

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

w powyższym przykładzie I zdefiniowania zależności dla wtyczki szkieletowej/xyz, ale chciałbym, aby określić zależności dla wszystkich wtyczek szkieletowych:

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

myślę, że kiedyś znalazł sens o nim na GitHub, ale nie wydaje się go odnaleźć.


Dla wyjaśnienia: Tu nie chodzi o wymóg cały folder, ale ustawienie zależności dla niego - Co wszystkie pliki w folderze potrzebuje zanim będą gotowe do inicjacji, a każdy z nich. Byłoby to być osiągnięte poprzez dodanie podkładek dla wszystkich plików, ale chciałbym tylko dodać, że podkładkę raz dla całego folderu:

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

To byłaby świetna funkcja. Zwłaszcza jeśli używam czegoś takiego jak Angular, który ma mnóstwo kontrolerów, usług itp. Byłoby wspaniale powiedzieć, że mój folder "aplikacji" zależy od kąta. –

Odpowiedz

2

Nie, nie można łatwo utworzyć wieloznaczny dodawania zależności do wszystkich plików pod folderem z samej konfiguracji. Możesz jednak utworzyć pętlę przed konfiguracją i dodać dowolne zależności.

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); 

Jest to jedyny sposób, w jaki mogę wymyślić, bez konieczności przesłonięcia jednej z funkcji wymagania samodzielnie. Niezbyt elegancko, muszę przyznać, ale wykona to zadanie.

+0

Powinieneś usunąć "każdy" po 'for':' for (var shim w config.shim) {} ' – andlrc

+0

Ach, przepraszam, myślałem actioncript. Naprawiony. –

1

Zainspirowany @J_A_X's answer

Można zrobić tablicę plików, które powinny dzielić te same zależności i stworzyć podkładkę dynamicznie:

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); 

Ale to nie będzie działać bardzo dobrze, jeśli ktoś minuglify korzystania r.js

Powiązane problemy