Die Datei wicket.js
hat einen Anruf an define
. Eine shim
dafür zu setzen ist nutzlos, weil shim
nur für nicht-AMD "Module" sinnvoll ist (d. H. Dateien, die nicht wirklich Module sind, die wir aber so verhalten wollen). AMD-Module rufen define
.
Auf der anderen Seite wicket-gmap3.js
ist kein AMD-Modul. So brauchen Sie brauchen die shim
dafür. Es hängt jedoch davon ab, dass Wkt
im globalen Bereich vorhanden ist. Die Logik in wicket.js
ist so, dass beim Aufruf Wkt
im globalen Raum nicht gesetzt ist. (Welcher ist das korrekte Verhalten für artige AMD-Module.) Sie müssen die Leckage selbst durchführen.
Ihre Konfiguration ändern:
define("wicket-glue", ["wicket"], function (wicket) {
Wkt = wicket; // Deliberately leak into the global space.
return wicket;
});
require.config({
waitSeconds: 200,
paths: {
'wicket': '/Vendor/Wicket/wicket',
'wicketGmap3': '/Vendor/Wicket/wicket-gmap3'
},
map: {
'*': {
wicket: 'wicket-glue',
},
'wicket-glue': {
wicket: 'wicket'
}
}
shim: {
wicketGmap3: {
deps: ['wicket']
}
},
});
Ich habe ein neues Modul namens wicket-glue
hinzugefügt. Ich lege solche Module oft zusammen mit der Konfiguration, so dass sie keinen zusätzlichen Datenabruf benötigen. Sie könnten es genauso gut in eine separate Datei einfügen, wenn Sie möchten. (Wenn ich das täte, dachte ich, das erste Argument define
entfernen würde und benennen Sie die Datei wicket-glue.js
so dass RequireJS den Modulnamen aus dem Dateinamen nimmt.)
Außerdem habe ich eine map
, die im Wesentlichen sagt „in Alle Module, wenn das Modul wicket
erforderlich ist, laden Sie stattdessen wicket-glue
, aber in wicket-glue
, wenn wicket
erforderlich ist, laden Sie wicket
".
Der Nettoeffekt ist, dass, wenn wicket
erforderlich ist, Wkt
wird auf den globalen Raum und wicket-glue
sollte gut funktionieren.