2015-07-14 27 views
8

In un ambiente RequireJS, qual è il modo migliore per consentire a alcuni moduli AMD di utilizzare Lo-Dash mentre altri utilizzano contemporaneamente Underscore?Uso di Lo-Dash e Underscore in modo simulante nell'ambiente RequireJS

+7

Lo-dash dovrebbe essere un rimpiazzo per la sottolineatura (ma non viceversa) in modo da perché non basta usare Lo-dash? –

+0

Possiedo moduli legacy non compatibili con Lo-Dash che devono essere eseguiti contemporaneamente con i moduli più recenti che utilizzano Lo-Dash. Refactoring e testing dei moduli precedenti non è attualmente possibile. –

+0

. . . E contrariamente alla credenza popolare e alle affermazioni, Lo-Dash non è un sostituto perfetto per Underscore. –

risposta

7

Sono stato in grado di risolvere il problema me stesso in modo abbastanza semplice. Specificamente utilizzare il percorso lodash per i moduli che richiedono Lo-Dash e underscore per i moduli che richiedono "sottolineatura":

require.config({ 
    paths: { 
    'underscore': 'path-to-my-underscore-file', 
    'lodash': 'path-to-my-lodash-file' 
    } 
}); 

In questo modo, i due librerie possono essere utilizzati contemporaneamente senza alcuna interferenza.

Contrariamente a quanto si crede e alle affermazioni, Lo-Dash non è uno perfetto sostituzione per Underscore.

+0

Non sono sicuro di chi abbia sostenuto che Lo-Dash è il sostituto perfetto per Underscore a parte per MAYBE Lo-Dash? – Xaxis

+1

Il numero di voti positivi sul primo commento di questa domanda indica l'idea sbagliata comune. Probabilmente è scontato perché sia ​​Underscore che Lo-Dash usano il "_" globale. –

5

La soluzione di pathing che hai già menzionato è un'opzione (credo sia la migliore). Conosco un modo alternativo, ma non penso necessariamente che sia migliore poiché è più ingannevole. Puoi rimappare cosa significano "lodash" e "underscore" per vari pacchetti.

requirejs.config({ 
    paths: { 
     'underscore': 'path-to-my-underscore-file', 
     'lodash': 'path-to-my-lodash-file' 
    }, 
    map: { 
     'some/lodash_compatible_module': { 
      'underscore': 'lodash' 
     }, 
     'some/lodash_compatible_folder': { 
      'underscore': 'lodash' 
     }, 
     'some/oldmodule_or_folder': { 
      'underscore': 'underscore' 
     } 
    } 
}); 

Se si desidera creare una facciata si potrebbe anche fare qualcosa di simile anche questo:

requirejs.config({ 
    paths: { 
     utils: 'lodash', 
     'underscore': 'path-to-my-underscore-file', 
     'lodash': 'path-to-my-lodash-file' 
    }, 
    map: { 
     'some/lodash_compatible_module': { 
      'utils': 'lodash' 
     }, 
     'some/lodash_compatible_folder': { 
      'utils': 'lodash' 
     }, 
     'some/oldmodule_or_folder': { 
      'utils': 'underscore' 
     } 
    } 
}); 

Mentre ci sono alcuni aspetti negativi con questo approccio. Ci sono cose interessanti. Vale a dire essere in grado di rimappare le dipendenze di terze parti che potrebbero pensare che un pacchetto sia (se questo è un problema).

Per ulteriori informazioni su come mappa opere check out: http://requirejs.org/docs/api.html#config-map

+0

Cablaggio molto interessante! –