RequireJS Optimizer de mainConfigFile no funciona

Estoy usando grunt-requirejs y la estructura de mi aplicación se ve así:

site/ dev/ index.html config.coffee app.coffee etc. srv_dev/ index.html config.js app.js etc. dist/ node_modules/ Gruntfile.coffee 

Cuando ejecuto grunt dev files se comstackn en js del café entre otras tareas y se copyn de dev / a srv_dev / y luego se sirven desde allí.

Mi tarea grunt dist hace lo que hace dev y luego ejecuta una tarea requirejs, que, espero, compile / combine todas las dependencies principales de mi aplicación, pero aún permite require(somevar) y define llamadas para ejecutarlas más tarde. Básicamente, tengo algunas partes de mi aplicación de una sola página que no se cargan hasta que el usuario hace clic en el enlace, lo que dispara una requrire() a requrire() y define() .

Mi problema actual parece bastante básico … He configurado mi tarea de gritar requirejs de la siguiente manera:

 requirejs: options: baseUrl: './' mainConfigFile: 'srv_dev/config.js' dist: options: out: 'dist/script.js' 

Esto arroja un Error: Error: Missing either a "name", "include" or "modules" option

He leído la mayoría de los documentos del optimizador, así como el file de compilation de ejemplo y no entiendo qué está pasando con este error. tkellen en este proyecto usa la opción name para almond.js, pero no creo que quiera hacer eso, porque necesito esas llamadas loader – loader require (). El file de compilation de ejemplo indica: "Solo especificar un nombre de module significa que el module se convertirá en un file creado que contiene todas sus dependencies". Así que ese fue mi próximo bash:

 requirejs: options: baseUrl: './' name: 'srv_dev/config.js' dist: options: out: 'dist/script.js' 

Con esto obtengo el Error: ENOENT, no such file or directory >> '/Users/user/Desktop/project/site/app.js'

Entonces encuentra config.js, pero luego no puede encontrar las routes listdas en la configuration, porque usa la baseUrl de la configuration require.js.

Y si especifico la baseUrl de './srv_dev' en la configuration de la tarea requirejs, entonces no puede encontrar mi file config.js. He intentado una variedad de paths para que esto funcione sin suerte. Creo que el gruntfile necesita estar en el mismo directory que el file config.js, pero no es así como está configurado mi proyecto.

Gracias amigos !!!

Aquí está el text completo de mi file config.coffee

 config = baseUrl: './' paths: # require plugins text : '/components/requirejs-plugins/lib/text' json : '/components/requirejs-plugins/src/json' # lib jquery : '/components/jquery/jquery' bootstrap : '/components/bootstrap/dist/js/bootstrap' lodash : '/components/lodash/dist/lodash' backbone : '/components/backbone/backbone' marionette : '/components/marionette/lib/backbone.marionette.min' handlebars : '/components/handlebars/handlebars' prism : '/components/customPrism/prism' coffeescript : '/components/coffee-script/extras/coffee-script' # app app : '/app/app' appSettings : '/app/appSettings' AppController : '/app/AppController' AppRouter : '/app/AppRouter' postMasterRecord : '/posts/postMasterRecord' util : '/scripts/util' templates : '/templates' handlebarsHelpers: '/scripts/handlebarsHelpers' shim: # lib bootstrap: deps: ['jquery'] backbone: deps: ['lodash', 'jquery'] exports: 'Backbone' marionette: deps: ['backbone', 'lodash', 'jquery'] exports : 'Marionette' handlebars: exports: 'Handlebars' templates: deps: ['handlebars'] # app app: deps: [ 'marionette' 'bootstrap' 'handlebars' 'templates' ] # deps: ['app'] require.config(config) require(['app']) 

Es perfectamente aceptable especificar el mismo file que su mainConfigFile y por name así:

 requirejs: options: mainConfigFile: 'srv_dev/config.js' baseUrl: './srv_dev' name: 'config' findNestedDependencies: true dist: options: out: 'dist/script.js' 

mainConfigFile le dice a r.js "aquí es donde puedes encontrar mi configuration en time de ejecución", mientras que el name dice "aquí está mi module principal". Uno no implica el otro.

Sin mainConfigFile r.js no puede encontrar su configuration de time de ejecución. Sin name (o include o modules ), no puede saber cuál es el punto de input de su aplicación.

findNestedDependencies: true se requiere para que r.js siga el require([app]) en su file config.js .