2015-07-14 5 views
8

In einer RequireJS-Umgebung können einige AMD-Module Lo-Dash verwenden, während andere gleichzeitig Underscore verwenden.Verwendung von Lo-Dash und Underscore simultan in der RequireJS-Umgebung

+7

Lo-Strich ein Drop-in-Ersatz für Unders sein sollte (aber nicht umgekehrt), so, warum Sie nicht nur Lo-Bindestrich? –

+0

Ich habe Legacy-Module, die nicht mit Lo-Dash kompatibel sind und gleichzeitig mit neueren Modulen ausgeführt werden müssen, die Lo-Dash verwenden. Das Refactoring und Testen der älteren Module ist derzeit nicht möglich. –

+0

. . . Und entgegen der landläufigen Meinung und Behauptungen ist Lo-Dash kein perfekter Drop-In-Ersatz für Underscore. –

Antwort

7

Ich konnte das Problem selbst ziemlich einfach lösen. Nutzen Sie hierzu speziell die lodash Pfad für Module, die Lo-Dash und underscore für Module erfordern, die „Unterstrich“ erfordern:

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

Auf diese Weise können die beiden Bibliotheken ohne Störung gleichzeitig werden.

Entgegen der landläufigen Meinung und Behauptungen ist Lo-Dash kein perfekter Drop-In-Ersatz für Underscore.

+0

Ich bin mir nicht sicher, wer behauptet hat, dass Lo-Dash der perfekte Drop-In-Ersatz für Underscore ist, abgesehen von MAYBE Lo-Dash? – Xaxis

+1

Die Anzahl der Up-Stimmen für den ersten Kommentar dieser Frage weist auf das verbreitete Missverständnis hin. Es wird wahrscheinlich angenommen, da sowohl Underscore als auch Lo-Dash das globale "_" verwenden. –

5

Die bereits erwähnte Pfadlösung ist eine Option (ich denke die bessere). Ich kenne einen alternativen Weg, aber ich denke nicht, dass es besser ist, weil es trügerischer ist. Sie können neu zuordnen, was "lodash" und "underscore" für verschiedene Pakete bedeuten.

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

Wenn Sie eine Fassade erstellen Sie auch auch so etwas tun könnte:

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

Während einige Negative mit diesem Ansatz gibt. Es gibt einige coole Dinge. Nämlich in der Lage zu sein, neu zuzuordnen, welche Abhängigkeiten von Drittanbietern ein Paket für möglich halten (wenn das ein Problem ist).

Weitere Informationen darüber, wie Kartenwerke check out: http://requirejs.org/docs/api.html#config-map

+0

Sehr interessante Verkabelung! –