2013-05-09 12 views
6

zauważam w dokumentacji nie ma sposobu, aby pass custom configuration into a module:Dostęp RequireJS ścieżka konfiguracja

requirejs.config({ 
    baseUrl: './js', 
    paths: { 
     jquery: 'libs/jquery-1.9.1', 
     jqueryui: 'libs/jquery-ui-1.9.2' 
    }, 
    config: { 
     'baz': { 
      color: 'blue' 
     } 
    } 
}); 

które można następnie przejść z modułu:

define(['module'], function (module) {   
    var color = module.config().color; // 'blue' 
}); 

Ale jest tam również sposób na dostęp konfiguracja ścieżek najwyższego poziomu, coś podobnego do tego?

define(['module', 'require'], function (module, require) {   
    console.log(module.paths()); // no method paths() 
    console.log(require.paths()); // no method paths() 
}); 

FYI, to nie jest miejsce produkcji. Próbuję połączyć jakiś dziwny kod debug/config na QUnit stronie testowej. Chcę wyliczyć, które nazwy modułów mają zdefiniowaną niestandardową ścieżkę. This question dotknął problemu, ale pozwala mi tylko wyszukiwać znane moduły, a nie je wyliczać.

Odpowiedz

4

Nie wierzę, że muszę ujawnić, że gdziekolwiek, przynajmniej nie mogę znaleźć go patrząc przez ogromny kod. Można to jednak osiągnąć na dwa sposoby. Pierwszym i najbardziej oczywistym jest zdefiniowanie konfiguracji jako zmiennej globalnej. Drugi, bardziej do tego, co chcesz, jest stworzenie wymaga wtyczki, który zastępuje funkcję obciążenia dołączyć config do modułu:

define({ 
    load: function (name, req, onload, config) { 
     req([name], function (value) { 
      value.requireConfig = config; 
      onload(value); 
     }); 
    } 
}); 
18

Jest on dostępny, ale szczegółów wdrażania, które nie powinny być zależne od kodu produkcyjnego (o którym już powiedziałeś, że nie jest, ale ostrzeżenie dla innych!)

Konflikt dla głównego kontekstu jest dostępny pod adresem require.s.contexts._.config. Inne konfiguracje będą również zawieszają się z tą właściwością contexts przy użyciu dowolnej nazwy skojarzonej z nią.

+0

Dobra odpowiedź, ale szybkie pytanie. Dlaczego nie użyć tego na kodzie produkcyjnym? – Shanimal

+1

@Shanimal Ponieważ rzeczy mogą się zmienić wraz z tym obiektem w przyszłości (ponieważ nie są bezpośrednio dostępne lub dostępne w dokumencie) i nie chcesz nagle złamać kodu produkcyjnego. – Vishwanath