Voglio essere in grado di definire opzionalmente un modulo e quindi usarlo o meno nel mio codice. La situazione particolare che sto considerando è il caricamento di moduli mock/stub nell'ambiente di debug/test ma non quando vado in diretta. Ecco l'esempio:Con requirejs è possibile verificare se un modulo è definito senza tentare di caricarlo?
nel file HTML i file js sarebbero opzionalmente caricati (pseudo codice):
//index.cshtml
...
<script src="/Scripts/lib/require.js"></script>
<script src="/Scripts/app/service_user.js"></script>
<script src="/Scripts/app/real_service.js"></script>
#if DEBUG
<script src="/Scripts/app/mock_service.js"></script>
#endif
In quanto sopra sia real_service e mock_service devono essere caricati nella versione di debug.
Ogni modulo sarebbe definito utilizzando requirejs, ad esempio:
//mock_service.js
define('mock_service', [],
function() {
...
});
//real_service.js
define('real_service', [],
function() {
...
});
Poi, quando si utilizza il servizio mi piacerebbe verificare se il mock_service è stata definita:
//service_user.js
define(['require', 'real_service'],
function (require, real_service) {
if (require.isDefined('mock_service')) { // 'isDefined' is what I wish was available
var mock = require('mock_service');
mock.init(real_service);
}
...
});
Quindi il mio nozionale ' La funzione isDefined dovrebbe semplicemente verificare la presenza di un modulo con il nome (o i nomi) dato. Quindi nel mio codice, se è definito, posso richiederlo e usarlo. Se no, allora va bene anche questo.
La cosa importante per me è che non viene effettuato alcun tentativo di caricare il modulo opzionale. Potrei provare/prendere in giro l'istruzione require ma ciò provocherebbe un tentativo di caricarlo dal server e non lo voglio.
Un'altra opzione sarebbe quella di definire uno stub che carico sempre e quindi c'è sempre una finta da richiedere, che posso quindi interrogare sul fatto che sia quella vera o meno, ma che sembra troppo dispendiosa.
C'è qualcuno là fuori che è profondamente dentro require.js che ha scoperto che hanno bisogno di questa funzionalità e hanno elaborato una strategia per l'implementazione?
Grazie in anticipo, Rob
Thx - Questo ha quasi soddisfatto le mie esigenze e mi ha aiutato a trovare la risposta giusta che ora ho aggiunto e contrassegnato come soluzione completa. – WooWaaBob
+1 ottima risposta e una bella funzionalità, non sapevo di questo! – thomaux
solo curioso, se qualche alternativa nella versione mandorla? –