RequireJS incorrectement charge des scripts à partir d'Url
Je suis l'aide de RequireJS pour charger les dépendances. C'est ainsi que ma config ressemble:
'use strict';
require.config({
paths: {
jQuery: 'http://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min',
underscore: 'http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.5.2/underscore-min',
backbone: 'http://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.1.0/backbone-min'
}
shim: {
jQuery: {
exports: '$'
},
underscore: {
exports: '_'
},
backbone: {
deps: [
'underscore',
'jQuery'
],
exports: 'Backbone'
}
}
});
Quand je lance mon site web statique, dans la console il y a des messages comme ceci:
GET http://*myhost*/js/backbone.js 404 (Not Found) require.js:1896
Uncaught Error: Script error for: backbone
http://requirejs.org/docs/errors.html#scripterror require.js:166
GET http://*myhost*/js/jQuery.js 404 (Not Found) require.js:1896
Uncaught Error: Script error for: jQuery
http://requirejs.org/docs/errors.html#scripterror require.js:166
GET http://*myhost*/js/underscore.js 404 (Not Found) require.js:1896
Uncaught Error: Script error for: underscore
http://requirejs.org/docs/errors.html#scripterror require.js:166
Uncaught ReferenceError: jQuery is not defined
Comme vous pouvez le voir, RequireJS ignore le fait que je suis fournissant des URLs pour le CND et essaye de regarder pour les modules localement.
Cependant, parfois, RequireJS fonctionne très bien - il charger des modules à partir d'Url. Une sorte de loterie. La peine de mentionner qu'il ne se produit que sur ma télécommande serveur de développement - c'est-quand-je accéder à mon site sur le web. Quand je lance mon site en local, RequireJS toujours à la charge des modules de CDN parfaitement bien. Bizarre, les idées de pourquoi ce qui se passe?
Mise à JOUR
C'est ainsi que je commence ma demande:
<script type="text/javascript" data-main="js/main" src="js/require.js"></script>
main.js (où config est chargé)
define(['config', 'router'], function(Config, Router) {
var router = new Router();
Backbone.history.start();
});
OriginalL'auteur user1091733 | 2014-04-04
Vous devez vous connecter pour publier un commentaire.
Votre module principal commence par:
Cela dit RequireJS pour charger
config
etrouter
mais ne précise pas les ordre dans lequel ils doivent être chargés. Sirouter
dépend des modules qui utilisent les réseaux de diffusion de contenu que vous avez indiqué dans votre configuration et en supposant queconfig
n'est pas parmirouter
's dépendances, alors vous serait en effet obtenir des intermittents du chargement des échecs. Lorsqueconfig
arrive à charger avantrouter
tout va bien. Siconfig
charges aprèsrouter
, puis l'enfer se déchaîne. La façon la plus simple de résoudre ce problème serait de déplacer votre configuration dans votremain.js
fichier. Vous pourriez avoir larequire.config
appel avant que ledefine
appel, et vous feriez bien évidemment plus listeconfig
parmi les dépendances.Si le déplacement de l'appel à
require.config
ne fonctionne pas pour vous, parce que (par exemple), vous avez besoin de partagerconfig
entre plusieurs pages puis ce serait aussi faire l'affaire:Le code ci-dessus garantit que
config
est chargé avant tout le reste.Votre configuration est également à tort que l'une des façons suivantes:
Vous devez toujours vous référer à jQuery
jquery
parce que jQuery (pour le meilleur ou pour le pire) code en dur son nom du module quejquery
tous les plafonds moins élevés. J'ai exécuter des tests avec l'aide dejQuery
au lieu dejquery
et a obtenu des résultats irréguliers.jQuery 2.0.3 n'a pas besoin d'une cale d'épaisseur. Avoir une cale car il ne confond RequireJS.
Est-ce que votre
router
module ontconfig
dans ses dépendances? (Je ne crois pas, mais j'ai pensé que je voudrais vous demander.)Non, absolument pas 🙂
J'ai mis à jour ma réponse à ce que je vois est l'explication la plus probable de ce qui se passe avec votre code.
Le travail comme un charme! Merci beaucoup!
OriginalL'auteur Louis