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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top