2012-01-16 27 views
9

Estoy escribiendo algunas pruebas para una aplicación que utiliza RequireJS. Debido a cómo funciona la aplicación, espera obtener algunas clases llamando al require. Entonces, para las pruebas, tengo algunas clases ficticias, pero no quiero tener que ponerlas en archivos individuales solo para esta prueba. Me gustaría mucho prefieren simplemente define() manualmente dentro de mi archivo de prueba de este modo:Definir módulos y usarlos inmediatamente con RequireJS

define('test/foo', function() { 
    return "foo"; 
}); 

define('test/bar', function() { 
    return "bar"; 
}); 

test("...", function() { 
    MyApp.load("test/foo"); // <-- internally, it calls require('test/foo') 
}); 

El problema aquí es que la evaluación de estos módulos se retrasa hasta que se dispara un evento onload de la escritura.

De require.js around line 1600:

//Always save off evaluating the def call until the script onload handler. 
//This allows multiple modules to be in a file without prematurely 
//tracing dependencies, and allows for anonymous module support, 
//where the module name is not known until the script onload event 
//occurs. If no context, use the global queue, and get it processed 
//in the onscript load callback. 
(context ? context.defQueue : globalDefQueue).push([name, deps, callback]); 

¿Hay alguna manera de que pueda activar manualmente la cola para ser evaluados?

Respuesta

0

las definiciones de los módulos deben limitarse a una por archivo (consulte here). Supongo que tener varios módulos definidos en un único archivo rompe los mecanismos internos de carga, que se basan en el evento de carga del script para determinar que está listo mientras se resuelven las dependencias.

, aunque solo sea para pruebas, recomiendo dividir esas definiciones en varios archivos.

Espero que ayude! aclamaciones.

+0

Puede agregar más de un módulo por archivo (considere al optimizar + Minify toda su aplicación), sólo hay que déle a cada módulo un nombre específico (vea el primer argumento de cadena para cada función 'define' en el OP). – nickf

+0

Además, los módulos son solo para probar y son ** muy ** básicos. Un poco más complicado que en el ejemplo anterior, pero no mucho. Tener cada uno en su propio archivo sería demasiado complicado. – nickf

+0

seguro, lo entiendo. pero por lo que puedo decir de los documentos, el único caso en el que tiene un solo archivo con múltiples módulos es después de que ocurre el paso de optimización/compilación. para ser sincero, no estoy tan familiarizado con requirejs, pero lo he usado en un par de proyectos. los documentos son bastante claros: 'Solo debe haber * una * definición de módulo por archivo en el disco. Los módulos se pueden agrupar en paquetes optimizados mediante la herramienta de optimización. Empezaría ahí :) – keeganwatkins

1

El mejor que he encontrado hasta ahora es exigir de forma asíncrona los módulos:

define("test/foo", function() { ... }); 
define("test/bar", function() { ... }); 

require(["test/foo"], function() { 
    var foo = require('test/foo'), 
     bar = require('test/bar'); 
    // continue with the tests.. 
}); 
Cuestiones relacionadas