2011-11-10 18 views
31

He estado construyendo una aplicación de una sola página usando requireJS y hasta ahora me encanta. Llegué al punto de desarrollar otras partes del sitio fuera de la aplicación principal y no estoy realmente seguro de cómo (o si) usar requireJS para esto.RequireJS: Multiple main.js?

En mi aplicación principal todo se desencadena por esta etiqueta script:

<script data-main='/scripts/main' src='/scripts/libs/require.js'> 

Ahora estoy desarrollando la página principal de los cuales tiene sus propias secuencias de comandos de front-end. Usar el optimizador cuando se trata de obtener el sitio en vivo que agrupará todos estos scripts en un solo paquete main.js. Estoy luchando por comprender dónde encaja el resto de mi sitio en esto.

Digamos que mi aplicación depende de jQuery y se incluye en la versión optimizada de la aplicación, ¿y si quiero usar jQuery en la página de inicio? No deseo cargar en mi aplicación main.js solo para acceder a mi módulo jQuery. Así que sí ... ¡un poco confundido!


estoy imaginando una estructura de sitio algo así como esto:

/scripts 
    - app-main.js //(includes all module dependencies after optimzation) 
    - home-main.js //(includes all module dependencies after optimzation) 

Aplicación:

<script data-main='/scripts/app-main' src='/scripts/libs/require.js'> 

Inicio:

<script data-main='/scripts/home-main' src='/scripts/libs/require.js'> 


Preguntas

  1. ¿Cómo puedo usar RequireJS para desarrollar diferentes partes de un sitio?
  2. ¿Se recomienda tener varios archivos main.js?
  3. ¿Cómo pueden mis diferentes archivos main.js compartir módulos comunes como jQuery post optimization?
+1

Me gustaría obtener más respuestas sobre esto. He estado jugando con "apilar" mis archivos require.js con solo tener varias llamadas a require(). Funciona bien, pero estoy buscando ideas sobre cómo controlar el orden sin utilizar modules/coffeescript ... –

+0

Encontré esta discusión útil para compartir la configuración en varias páginas: https://github.com/jrburke/requirejs/ issues/354 – mikebridge

Respuesta

0

So require.js siempre se debe utilizar en cualquier página para permitir la modularidad y un espacio de nombres limpio. Creo que cada 'aplicación' necesita su propio script main.js. Al optimizar su sitio, r.js le permite excluir módulos de la compilación, lo que siempre debe hacer para jQuery.

De esta manera require.js siempre cargará jquery.js sobre la marcha y la mayor parte del tiempo desde la caché. Encontrar otros módulos que puedan almacenarse en la memoria caché entre su aplicación y la página de inicio tendrá que hacerse a su propia discreción y dependerá del flujo de sus usuarios y de otros factores.

Parece que tiene dos proyectos, una aplicación y un sitio de marketing. Creo que estos deberían estar separados por completo y deberían tener sus propias carpetas 'js' que contengan sus propios main.js.

+22

Esta respuesta básicamente dice: "no hagas lo que intentas hacer". A veces esa es una respuesta correcta, pero en este caso, me gustaría saber si lo que está haciendo es técnicamente posible. ¿Realmente sabemos lo suficiente sobre la pregunta para saber si su aplicación es tan grande que debe dividirse? Si está tratando de crear una aplicación de una sola página, podría querer múltiples archivos requeridos para diferentes segmentos de su aplicación ... –

+2

No creo que esto sea filosófico o técnicamente correcto. Hay muchos casos en los que una sola aplicación podría tener varios bultos de código que no deberían ser reducidos a la vez. La respuesta a continuación de @PutzKipa es útil. –

38

El equipo requirejs tiene algunas muestras para aplicaciones de varias páginas en github. un vistazo a: https://github.com/requirejs/example-multipage

Básicamente, usted va a tener la siguiente estructura:

  • page1.html: página 1 de la aplicación.

  • page2.html: página 2 de la aplicación.

  • js aplicación: el directorio para almacenar módulos específicos de la aplicación.

  • lib: el directorio que contiene los módulos de terceros, como jQuery.

  • common.js: contiene la configuración requirejs, y será el objetivo de compilación para el conjunto de módulos comunes.

  • page1.js: utilizado para el principal de datos para page1.html. Carga el módulo común, luego carga la aplicación/main1, el módulo principal para la página 1.

  • page2.js: se utiliza para el principal de datos para page2.html. Carga el módulo común, luego carga la aplicación/main2, el módulo principal para la página 2.

+0

Probé la página de muestra y pude obtener una página optimizada. Intentalo. – OnesimusUnbound

+0

La pieza interesante para mí aquí fue build.js podría excluir un archivo que acaba de crearse y se excluirían todos los módulos de ese archivo. https://github.com/requirejs/example-multipage/blob/master/tools/build.js –

Cuestiones relacionadas