Come può "definire" non essere definito quando si carica con la Richiestajs?
-
20-12-2019 - |
Domanda
Sto lottando per capire perché un modulo caricato con RequireJS non ha accesso alla funzione define
.
nel mio html:
<script data-main="/assets/js/app/main.js" src="/assets/libs/require.js/2.1.9/require.js" type="text/javascript"></script>
.
in 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();
}
);
.
In questo, colorbox.js
carichi solo bene ed è avvolto come:
define(['jquery'], function ( jQuery ) {
// ...Colorbox code here
});
.
Quando cerca di caricare jvfloat.js, getta:
.Uncaught ReferenceError: Definisci non è definito
Anche se è avvolto con il esatto stesso wrapper come Colorbox.
I ANCHE Provato Aggiunta di uno shim (non che ha senso) per vedere se posso forzare il carico ... ma non funzionava neanche:
shim: {
'jvfloat': {
deps: ['require','jquery'],
exports: 'jvfloat'
}
}
.
Ho anche provato a rimuovere il wrapper define
e impostando il mio Shim come questo che è il modo in cui Documentazione suggerisce di farlo :
shim: {
'jvfloat': {
deps: ['jquery'],
exports: 'jQuery.fn.jvfloat'
}
}
.
.
TL; DR; Cosa può causare caricare una libreria da Resta RequireJS di non avere accesso alla funzione define
?
Soluzione
OK Ho capito una soluzione alternativa utilizzando la parte Shim della configurazione Richiestajs.Quello che avevo provato prima usato jvfloat
come chiave dell'array, quando avrei dovuto usare la cosa completa.Quindi funziona:
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'
}
}
});
.
Non ho ancora idea di come usare define
per qualcosa di simile, ma, oh bene, questo conta come una soluzione e può aiutare qualcun altro in futuro.