2013-05-09 12 views
6

ho notato nella documentazione c'è un modo per pass custom configuration into a module:accesso RequireJS percorso di configurazione

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

Quale allora si può accedere dal modulo:

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

ma c'è anche un modo per l'accesso la configurazione dei percorsi di livello superiore, qualcosa di simile?

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

FYI, questo non è per un sito di produzione. Sto provando a collegare qualche strano codice di debug/config all'interno di una pagina di test QUnit. Voglio enumerare quali nomi di moduli hanno un percorso personalizzato definito. This question toccato sul problema, ma mi consente solo di interrogare moduli noti, non di elencarli.

risposta

4

Non credo che debba esporlo da nessuna parte, almeno non riesco a trovarlo guardando attraverso l'immensa base di codice. Ci sono due modi in cui puoi ottenere questo risultato. Il primo e più ovvio è definire la configurazione come variabile globale. Il secondo, e più vicino a ciò che si vuole, è quello di creare un richiedono plugin che sostituisce la funzione di carico per fissare la configurazione al modulo:

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

E 'disponibile, ma è un dettaglio di implementazione che non dovrebbe essere dipende dal codice di produzione (che hai già detto non è per, ma equo avvertimento per gli altri!)

La configurazione per il contesto principale è disponibile a require.s.contexts._.config. Altre configurazioni si collegheranno anche a quella proprietà contexts con qualsiasi nome associato.

+0

Buona risposta, ma domanda veloce. Perché non usare questo sul codice di produzione? – Shanimal

+1

@Shanimal Perché le cose potrebbero cambiare con questo oggetto in futuro (dal momento che non sono esposte direttamente o disponibili in doc) e non si desidera interrompere bruscamente il codice di produzione. – Vishwanath

Problemi correlati