2012-03-19 14 views
10

Actualmente estoy trabajando en un proyecto grande JavaScript y estoy usando RequireJS imponer alguna estructura.Uso de RequireJS con un único fichero de construcción para producir múltiples salidas

Me gustaría configurar una compilación utilizando el optimizador (r.js) para que mi proyecto se agrupe en un archivo modificado (para fines de producción). Esto es bastante fácil, sin embargo, tengo un par de paquetes en mi proyecto y me gustaría tener cada paquete integrado en su propio archivo javascript minificado.

Ejemplo de la estructura de carpetas:

src/core/main.js 
src/core/util/HashMap.js (
src/package1/main.js 
src/package1/views/view1.js 

Cuando los archivos main.js son los puntos de entrada para los módulos.

me gustaría configurar mi construcción de tal manera que después de que se complete la construcción, lo habría hecho las dos salidas siguientes:

core.min.js 
package1.min.js 

Sin embargo, me parece que no puede conseguir que esto funcione. El uso de la propiedad modules de la configuración de compilación no parece minificar cada módulo.

¿Alguien puede arrojar luz sobre lo que estoy haciendo mal aquí?

+0

¿Se puede tener una acumulación por módulo, con un perfil de acumulación por módulo que utiliza el 'vacío:' esquema para eliminar código no módulo de salida de ese módulo en particular? http://requirejs.org/docs/optimization.html # vacía –

+0

Eso sería una posibilidad, sin embargo yo prefiero tener un archivo de configuración única, que me exigía para ejecutar el comando de construcción solamente una vez – thomaux

+1

¿Se puede usar 'exclude' para cada módulo? https://github.com/jrburke/r.js/blob/c319938abb55f493d0a46566114364c4935321de/build/example.build.js#L240 –

Respuesta

0

No recuerdo exactamente lo que estaba mal en el momento en que pregunté esto (incluso podría haber sido un error de la versión RequireJS actual que estaba usando en ese momento), pero este tipo de configuración es fácilmente alcanzable mediante (como dije en mi pregunta) la sección modules. Simplemente declarar sus módulos de la siguiente manera:

optimize:"uglify", 
dir: 'out', 
modules: [ 
    { 
     name: "src/core/Main" 
    }, 
    { 
     name: "src/package1/Main" 
    } 
], 
... 

Esto dará lugar a la siguiente estructura bajo out:

out 
|--core 
: |--Main.js 
|--package1 
: |--Main.js 

Hay opciones disponibles para cambiar el nombre de los archivos de salida, para aplanar la carpeta de salida, para excluir todos core paquetes de package1 y muchos más, pero básicamente esta era la estructura que estaba buscando.

1

tuve Require.JS problemas para conseguir que hacer todo lo que precisamente la forma que necesitaba por sí mismo.

actualmente estoy usando Grunt para esto. Tengo el Require.JS plugin for Grunt configurado para combinar una docena de archivos de módulo en solo 2 archivos. Yo uso modules, empty: y exclude aquí y allá para ayudar a lograr esto. Require.JS sigue siendo la mejor manera de combinar módulos en función de sus dependencias.

Luego uso del Uglify plugin for Grunt a minify separado la salida.

Si bien esto podría no ser útil con su caso de uso, también estoy usando Grunt's concat plugin para ayudar a obtener mi salida como a mí me gusta.

Esto es todo en un Gruntfile.js y todo esto sucede automáticamente con grunt watch cada vez que un archivo cambia, haciendo que el bucle de desarrollo-actualización-prueba sea un poco más agradable.

Cuestiones relacionadas