2012-07-26 8 views
24

Estoy leyendo la documentación del optimizador durante bastante tiempo, pero parece que no puedo entenderlo. El doctor dice:requireJS optimizer no incluye llamadas de solicitud anidadas

El optimizador sólo se combinará módulos que se especifican en las matrices de literales de cadena que se pasa al nivel superior requiere y definir llamadas o los solicite ('nombre') llamadas literales de cadena en una envoltura de CommonJS simplificada . Por lo tanto, no va a encontrar módulos que se cargan a través de un nombre de variable de :

bien hasta ahora tan bueno. Esto significa básicamente r.js no incluirá ni rastreará dependencias anidadas. Ahora vamos a suponer que tenemos un archivo "aplicación principal", que tiene el siguiente aspecto:

require([ 'es5shim', 'tools' ], function() { 
    console.log('fictive app entry point'); 

    require([ 'domready!' ], function(doc) { 
     console.log('domReady, loading GUI modules...'); 
     require([ 'GUI/window', 'GUI/header', 'GUI/content' ]); 
    }); 
}); 

supongo que el problema se vuelve bastante obvio aquí. r.js (el optimizador) crea ese archivo al vincular solo es5shim.js y tools.js en él. ¿Hay alguna buena forma/solución para decirle a ese optimizador que también debe vincular los archivos window.js, header.js y content.js en este ejemplo?

Por supuesto, el complemento domReady en este caso se cargará y eventualmente ejecutará la devolución de llamada, pero la propia estructura aquí parece que impide que el optimizador haga su trabajo.

cuestión son:

  • Si tan sólo hubiera una lista de todos los módulos en el "Top requiere llamar", se r.js también incluir + vincular todas require y define principales llamadas de anidado y módulos anidados anidados en el archivo de la aplicación principal ?

  • Están mencionando el incluyen opción para r.js en los Docs. ¿Tiene sentido aquí y, de ser así, cómo invocarlo correctamente?

Por supuesto que no quieren perder la opción de módulos de carga perezosa-tarde-a, pero para este tipo de dependencia (en espera de DOMContentLoaded), espero que haya una manera de solucionar eso.

+0

No entiendo: ¿por qué anidan en primer lugar? ¿Por qué no hacer que GUI/window dependa de es5shim y hacer que es5shim dependa de domready! ? – machineghost

Respuesta

44

De forma predeterminada, RequireJS no analiza las llamadas de solicitud anidadas porque supone que están destinadas a cargar dependencias en el tiempo de ejecución. Usted anula esto configurando

findNestedDependencies: true 

en su configuración de optimización. Espero que ayude.

+0

Muy bien, gracias. – Eric

+5

Esto es realmente útil para saber, y no es particularmente fácil de encontrar en los documentos RequireJS – hellosmithy

+0

¡Gracias! ¡Esto prácticamente ha resuelto mi problema! –