2013-05-23 2 views
0

Je suis capable de compiler avec succès mes modules JS via la tâche requirejs de Grunt, mais je ne suis pas défini avec les scripts shim. Voici ma configr.js ne compile pas correctement les scripts shimmed

requirejs.config({ 
    "baseUrl": "../../../components/", 
    "paths": { 
     "less": "less.js/dist/less-1.3.3", 
     "datepicker": "jquery-ui/ui/jquery.ui.datepicker", 
     "jquery": "jquery/jquery", 
     "jqueryui": "jquery-ui/ui/jquery-ui", 
     "spectrum": "spectrum/spectrum", 
     "class": "class/class", 
     "underscore": "underscore-amd/underscore", 
     "d3": "d3/d3", 
     "nv": "nvd3/nv.d3", 
     "dataTables": "datatables/dataTables" 

    }, 
    shim: { 
     less: { 
      exports: "less" 
     }, 
     jqueryui: { 
      exports: "jqueryui" 
     }, 
     spectrum: { 
      exports: "spectrum" 
     }, 
     class:{ 
      deps: [ 'jquery'], 
      exports: "class" 
     } 
    } 
}) 

Voici mon requirejs config de mon Gruntfile:

requirejs: { 
    dist: { 
     options: { 
      mainConfigFile: 'src/scripts/main.js', 
      out: '<%= yeoman.dist %>/scripts/main.js', 
      paths:{ 
       "main" : "../final/src/scripts/main" 
      }, 
      include:['main'], 
      preserveLicenseComments: false, 
      useStrict: true, 
      wrap: true 
     } 
    } 
} 

Maintenant, quand je lance grunt requirejs:dist Il compile très bien, et ne comprend mes fichiers calés. Mais chaque fois que j'essaie d'exécuter le JS compilé, l'accès à l'un de mes scripts shimmed n'est pas défini.

Répondre

0

Vous ne savez pas exactement ce que vous entendez par "l'accès à l'un de mes scripts shimmed n'est pas défini". Vous devez vous assurer que les scripts shimmed sont inclus dans le bon ordre. Aussi, vous pouvez essayer de définir un faux module pour ce script. Dans votre construction configuration JS ajouter:

onBuildRead: function (moduleName, path, contents) { 
    if (moduleNam === 'spectrum'){ 
     contents += '; define(' + moduleName + ', function(){ return window.spectrum; });'; 
    } 
    return contents; 
} 

Vous avez besoin de comprendre ce que les exportations. Une fois le script chargé, il recherchera cette variable dans un espace de noms global. Je ne pense pas qu'il y ait un espace de noms 'jqueryui'. Donc il sera toujours indéfini, car il doit charger après jQuery et il étend juste jQuery, donc module ne peut rien retourner d'utile.

J'espère que cela aide.

Questions connexes