2012-06-25 24 views
11

? Tengo un problema donde las llamadas a la configuración require.js casi idénticas parecen funcionar de manera diferente, en un caso no estableciendo baseUrl y path.¿Por qué require.js ignora la configuración baseUrl y las rutas

estructura de carpetas

  • /js
    • app/
    • libs/
      • hogan.js
      • backbone
        • Backbone.js
        • etc.
      • boostrap
      • jquery
        • jQuery.js
        • etc.
      • requieren
        • require.js
        • etc.
    • templates/
    • require.co nfig.js

etiqueta de script

<script data-main="/resources/js/require.config" src="/resources/js/libs/require/require.js"></script>

requieren configuración

require.config(
    { 
     baseUrl: "/resources/js/libs", 
     shim: { 
      "underscore": { 
       exports: "_" 
      }, 
      "backbone": { 
       deps: [ 
        "json2", 
        "underscore", 
        "jquery" 
       ], 
       exports: "Backbone" 
      } 
     }, 
     paths: { 
      "app": "/resources/js/app", 
      "backbone": "backbone/backbone", 
      "jquery": "jquery/jquery", 
      "templates": "/resources/js/templates", 
      "templateEngine": "hogan" 
     } 
    } 
); 

require(
    [ 
     "app/router" 
    ], 
    function(AppRouter){ 
     AppRouter.execute(); 
    } 
); 

En ambos casos, una etiqueta de script se anexa que muestra el contenido completo de require.configjs, a partir de:

<script type="text/javascript" charset="utf-8" data-requirecontext="_" data-requiremodule="require.config" src="/resources/js/require.config.js">

definicion en app/enrutador

define(
    [ 
     'backbone', 
     'templateEngine' 
    ], 
// etc 
); 

Sin embargo, cuando se produce el problema, app/enrutador no está cargado, sólo la siguiente (sin 404, nada) :

GET require.js 200 OK 180ms  
GET require.config.js 200 OK 69ms 

Si entro require(["app/router"]); en la consola de Firebug me sale el siguiente:

"NetworkError: 404 Not Found - /resources/js/backbone.js 
"NetworkError: 404 Not Found - /resources/js/templateEngine.js" 

Cuando lo que espero ver es:

  • /resources/js/libs/backbone/backbone.js
  • /resources/js/libs/hogan.js

Soluciones intentaron

  • He intentado utilizar varias combinaciones de rutas relativas y absolutas para baseUrl y paths. Por ejemplo baseUrl: libs, y paths: { "app" : "../app" }, etc.
  • Probé deps y callback en lugar de utilizar require debajo config.
  • He agregado la propiedad context, haciendo coincidir baseUrl.
  • he movido require.config.js en las librerías directorio (edición baseUrl y paths según proceda; aún así obtener la misma edición de config ignorado, sólo se intenta cargar /recursos/js/libs/columna vertebral .js en su lugar, por ejemplo).

Nota

Esta estructura de carpetas y archivos de configuración funciona en mi localhost, donde elimino /recursos/ de los caminos como se muestra arriba. En su lugar, todas las rutas relativas (ninguna que comience con /) se utilizan para baseUrl y paths. Pero en el servidor real eso no es una opción.

Respuesta

3

La solución era no tener ninguna. (puntos) en el nombre del archivo de configuración. Después de cambiar el nombre del archivo a require-config.js todo funcionó como se esperaba. Otros archivos están bien con puntos en el nombre, simplemente no es el archivo de configuración principal.

+0

Tuve el mismo problema. Si alguna vez no quiere modificar el nombre del archivo, puede alias el módulo a través del hash de ruta en la configuración de requirejs. p.ej. "require.config ({paths: {myModule:" /path/to/my.weird.module "}})" – jdc0589

+0

No obstante, no creo que pueda alias su nombre de archivo de configuración. Esto funciona si el archivo de configuración no se ve afectado. – morewry

Cuestiones relacionadas