J'ai lu le document requirejs à partir d'ici API
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();
}
}
}
});
mais je ne reçois pas shim partie. pourquoi dois-je utiliser shim et comment dois-je configurer, puis-je obtenir plus de précisions
s'il vous plaît, quelqu'un peut-il expliquer avec un exemple pourquoi et quand devrions-nous utiliser shim. Merci.
Underscore
etBackbone
ici utilisez comme d'habitude, queshim
faire dans ce cas? Puis-je utiliserrequire( function() { _.extend({}); })
? Comprend-il_
?Conformément à la documentation de l'API RequireJS, shim vous permet
- Configuration des dépendances
Disons que vous avez 2 modules javascript (moduleA et moduleB) et l'un d'eux (moduleA) dépend de l'autre (moduleB). Les deux sont nécessaires pour votre propre module, vous spécifiez donc les dépendances dans require () ou define ()
Mais comme il doit suivre AMD, vous ne savez pas lequel serait récupéré tôt. C'est là que Shim vient à la rescousse.
Cela garantirait que moduleB est toujours récupéré avant le chargement de moduleA.
- Configuration des exportations
L'exportation Shim indique à RequireJS quel membre de l'objet global (la fenêtre, en supposant que vous êtes dans un navigateur, bien sûr) est la valeur réelle du module. Disons que moduleA s'ajoute au
window
as 'modA' (tout comme jQuery et le soulignement le font respectivement pour $ et _), alors nous rendons nos exportations valeur 'modA'.Cela donnera à RequireJS une référence locale à ce module. Le modA global existera également sur la page.
-Initialisation personnalisée pour les anciens scripts "globaux du navigateur"
C'est probablement la caractéristique la plus importante de shim config qui nous permet d'ajouter des scripts «globaux de navigateur», «non-AMD» (qui ne suivent pas non plus le modèle modulaire) comme dépendances dans notre propre module.
Disons que moduleB est un javascript simple avec seulement deux fonctions funcA () et funcB ().
Bien que ces deux fonctions soient disponibles dans la portée de la fenêtre, RequireJS nous recommande de les utiliser via leur identifiant / handle global pour éviter les confusions. Donc, configurer la cale comme
La valeur de retour de la fonction init est utilisée comme valeur d'exportation du module au lieu de l'objet trouvé via la chaîne 'exports'. Cela nous permettra d'utiliser funcB dans notre propre module comme
J'espère que cela a aidé.
la source
Vous devez ajouter des chemins dans requirejs.config pour déclarer, par exemple:
la source