2012-05-29 14 views
9

Usando shim por requirejs2, hay una forma de saber que un módulo ya está cargado?Requirejs using shim

Ejemplo:

<script type="text/javascript" src="jquery.js"></script> 
<script type="text/javascript" src="undescrore.js"></script> 
<script type="text/javascript" src="require.js'"></script> 
<script type="text/javascript"> 
    require.config({ 
     paths: { 
      "backbone": '/vendor/js/backbone-min.js' 
     }, 
     shim: { 
      'backbone': { 
       //These script dependencies should be loaded before loading 
       //backbone.js 
       deps: ['underscore', 'jquery'], // here I would like to load the already loaded library 
      } 
     } 
    }); 
</script> 

Respuesta

23

Bueno, si subrayado ya está cargado y disponible, que no es necesario el suplemento en absoluto. Backbone se cargará felizmente. Si no, es probable porque el subrayado es no realmente cargado.

Suena incorrecto utilizar solo parcialmente require.js, también podría cargarlos AMD por completo. Para ello tendrá que cambiar su calce de esta manera:

shim: { 
    backbone: { 
     deps: ["underscore", "jquery"], 
     exports: "Backbone" 
    }, 

    underscore: { 
     exports: "_" 
    } 
} 

y por supuesto actualizar su paths.

1

No estoy seguro de si pudo encontrar el mejor enfoque para su caso de uso. Si realmente, por alguna razón, necesita agregar sus otros scripts sin usar RequireJS como en su ejemplo de código @ js999, entonces necesitaría verificar si la variable global (jQuery, _) de esos scripts existe y luego definirlos como módulos. Desde su ejemplo de código se vería algo como esto:

<script type="text/javascript" src="jquery.js"></script> 
<script type="text/javascript" src="undescrore.js"></script> 
<script type="text/javascript" src="require.js'"></script> 
<script type="text/javascript"> 
    // check for jQuery 
    if (window.jQuery) { 
     define('jquery', [], function() { 
      return window.jQuery; 
     }); 
    } 

    // check for underscore 
    if (window._) { 
     define('underscore', [], function() { 
      return window._; 
     }); 
    } 

    require.config({ 
     paths: { 
      // remove the file extension (.js)   
      "backbone": '/vendor/js/backbone-min' 
     }, 
     shim: { 
      'backbone': { 
       deps: ['underscore', 'jquery'] 
      } 
     } 
    }); 
</script>