Comment puis “définir” ne pas être définis lors du chargement avec RequireJS?
-
20-12-2019 - |
Question
J'ai du mal à comprendre pourquoi un module chargé avec RequireJS n'ont pas accès à l' define
fonction.
Dans mon code HTML:
<script data-main="/assets/js/app/main.js" src="/assets/libs/require.js/2.1.9/require.js" type="text/javascript"></script>
Dans main.js
:
// Initialize Require.js
require.config({
baseUrl: 'http://test.dev/cart/assets',
paths: {
jquery: 'https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min'
}
});
// Main app logic
require( ['jquery',
'js/app/cart',
'js/app/wizard',
'js/lib/colorbox',
'js/lib/jvfloat'], function ($, Cart, Wizard, ColorBox, jvfloat) {
// Initialize Cart
Cart.init();
// Initialize Wizard
Wizard.init();
}
);
En ce que, colorbox.js
charge très bien et est enveloppé comme:
define(['jquery'], function ( jQuery ) {
// ...Colorbox code here
});
Lorsqu'il essaie de charger jvfloat.js il lance:
Uncaught ReferenceError:définir n'est pas défini
Même s'il est emballé avec le exact même enveloppe colorbox.
J'ai même essayé l'ajout d'une cale d'épaisseur (non pas qu'il fait sens) pour voir si je peux forcer la charge...mais qui ne fonctionne pas non plus:
shim: {
'jvfloat': {
deps: ['require','jquery'],
exports: 'jvfloat'
}
}
J'ai aussi essayé de supprimer les define
wrapper, et la définition de mon cale comme ce qui est la façon dont la la documentation suggère de le faire:
shim: {
'jvfloat': {
deps: ['jquery'],
exports: 'jQuery.fn.jvfloat'
}
}
TL;DR; Ce qui peut provoquer une bibliothèque en cours de chargement par RequireJS de ne pas avoir accès à l' define
la fonction?
La solution
Ok j'ai trouvé une solution de contournement à l'aide de la cale une partie de la RequireJS config.Ce que j'avais essayé avant de servir jvfloat
comme la clé du tableau, où je devais utiliser la totalité de la chose.Donc cela fonctionne:
require.config({
baseUrl: 'http://test.dev/cart/assets',
paths: {
jquery: 'https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min'
},
shim: {
'js/lib/jvfloat': {
deps: ['jquery'],
exports: 'jQuery.fn.jvfloat'
}
}
});
Toujours pas d'idée de comment l'utiliser define
pour quelque chose comme cela, mais, oh, eh bien, cela compte comme une solution et peut aider quelqu'un d'autre dans l'avenir.