Ich habe das requirejs- Dokument von hier API gelesen
requirejs.config({
shim: {
'backbone': {
//These script dependencies should be loaded before loading
//backbone.js
deps: ['underscore', 'jquery'],
//Once loaded, use the global 'Backbone' as the
//module value.
exports: 'Backbone'
},
'underscore': {
exports: '_'
},
'foo': {
deps: ['bar'],
exports: 'Foo',
init: function (bar) {
//Using a function allows you to call noConflict for
//libraries that support it, and do other cleanup.
//However, plugins for those libraries may still want
//a global. "this" for the function will be the global
//object. The dependencies will be passed in as
//function arguments. If this function returns a value,
//then that value is used as the module export value
//instead of the object found via the 'exports' string.
return this.Foo.noConflict();
}
}
}
});
aber ich bin nicht immer Shim Teil davon. Warum sollte ich Shim verwenden und wie sollte ich konfigurieren? Kann ich mehr Klarheit bekommen?
Bitte kann jemand anhand eines Beispiels erklären, warum und wann wir Shim verwenden sollten. Vielen Dank.
Underscore
undBackbone
hier wie der normale verwendet, wasshim
tun Sie in diesem Fall? Kann ich verwendenrequire( function() { _.extend({}); })
? Versteht es_
?Gemäß der RequireJS-API-Dokumentation können Sie mit shim
- Abhängigkeiten konfigurieren
Nehmen wir an, Sie haben 2 Javascript-Module (Modul A und Modul B) und eines davon (Modul A) hängt vom anderen ab (Modul B). Beide sind für Ihr eigenes Modul erforderlich, sodass Sie die Abhängigkeiten in require () oder define () angeben.
Aber da sich AMD selbst folgen muss, haben Sie keine Ahnung, welches früh abgeholt wird. Hier kommt Shim zur Rettung.
Dies würde sicherstellen, dass Modul B immer abgerufen wird, bevor Modul A geladen wird.
- Exporte konfigurieren
Der Shim-Export teilt RequireJS mit, welches Mitglied des globalen Objekts (das Fenster, vorausgesetzt, Sie befinden sich natürlich in einem Browser) der tatsächliche Modulwert ist. Nehmen wir an, ModulA fügt sich
window
als 'modA' hinzu (genau wie jQuery und Unterstrich als $ bzw. _), dann setzen wir unseren Exportwert auf 'modA'.RequireJS erhält einen lokalen Verweis auf dieses Modul. Das globale modA wird auch weiterhin auf der Seite vorhanden sein.
- Benutzerdefinierte Initialisierung für ältere "Browser Global" -Skripte
Dies ist wahrscheinlich das wichtigste Merkmal der Shim-Konfiguration, mit dem wir "Browser Global" -, "Nicht-AMD" -Skripte (die auch nicht dem modularen Muster folgen) als Abhängigkeiten in unserem eigenen Modul hinzufügen können.
Nehmen wir an, Modul B ist einfaches altes Javascript mit nur zwei Funktionen funcA () und funcB ().
Obwohl beide Funktionen im Fensterbereich verfügbar sind, empfiehlt RequireJS, sie über ihre globale Kennung / Handle zu verwenden, um Verwirrungen zu vermeiden. So konfigurieren Sie die Unterlegscheibe als
Der Rückgabewert der Init-Funktion wird anstelle des über die Zeichenfolge 'export' gefundenen Objekts als Modul-Exportwert verwendet. Dadurch können wir funcB in unserem eigenen Modul als verwenden
Hoffe das hat geholfen.
quelle
Sie müssen Pfade in requirejs.config hinzufügen, um zu deklarieren. Beispiel:
quelle