2013-03-20 4 views
11

Come dice il titolo, le mie chiamate in linea richiedono che le chiamate funzionino in un requirejs non ottimizzato ma non funzionino quando sono compilate con grunt e almondjs.Inline require() funziona in requirejs ma non con la configurazione ottimizzata di mandorla

Uncaught Error: undefined missing views/some/view 

parte superiore di qualsiasi file potrebbe essere:

define(
['jquery', 'app'], 
function($, App) { 

e più tardi basa sulla logica di business che voglio essere in grado di richiedere un altro file

require(['views/some/view'], function(SomeView){ 
    console.log(SomeView); 
}); 

ho provato la sintassi alternativa pure:

var SomeView= require('views/some/view'); 

E tutto funziona utilizzando una versione di requirejs non installata. Ma ancora una volta non riesce quando costruire con grugnito e mandorla

requirejs: { 
     compile: { 
      options: { 
       name: "../components/almond/almond", 
       baseUrl: "src", 
       mainConfigFile: "./require.config.js", 
       include: ['main'], 
       insertRequire: ['main'], // Add a require step in at the end for the main module. 
       wrap: true, // Wrap everything up in a closure 
       generateSourceMaps: true, // Experimental 
       preserveLicenseComments: false, // Needs turned off for generateSourceMaps 
       optimize: "uglify2", // Supports generateSourceMaps 
       out: "assets/javascripts/build.js" 
      } 
     } 
    }, 

posso farlo funzionare bene in mandorle, se lo metto in cima del file in una chiamata definire, ma non è preferibile in AMD per tenerlo asciutto?

risposta

10

Secondo la documentazione di Almond, funziona meglio con il caricamento non dinamico e tutto ciò che è contenuto in un unico file.

Dovresti essere in grado di impostare "findNestedDependencies" su true nelle opzioni di compilazione per assicurarti che le chiamate inline richiedano come parte della build.

+0

+1 Aveva lo stesso problema e questo lo ha risolto. – daemon

+0

Grazie, mi hai salvato la giornata! – njtman