2010-12-10 15 views
10

Estoy tratando de escribir un archivo make básico que combine varios archivos js en uno solo y luego haga lo mismo pero los comprime.Makefile para combinar archivos js y crear una versión comprimida

Hasta ahora tengo este que puede mejorar la versión comprimida.

# Set the source directory 
srcdir = src/ 

# Create the list of modules 
modules = ${srcdir}core.js\ 
      ${srcdir}sizzle.js\ 
      ${srcdir}json2.js\ 
      ${srcdir}ajax.js\ 
      ${srcdir}attribute.js\ 
      ${srcdir}content.js\ 
      ${srcdir}cookie.js\ 
      ${srcdir}css.js\ 
      ${srcdir}event.js\ 
      ${srcdir}json.js\ 
      ${srcdir}location.js\ 
      ${srcdir}opacity.js\ 
      ${srcdir}ready.js\ 
      ${srcdir}size.js\ 
      ${srcdir}init.js 

# Compress all of the modules into spark.js 
spark.js: ${modules} 
    java -jar yuicompressor.jar -o [email protected] $^ 

¿Alguien sabe cómo me gustaría añadir una versión sin comprimir llamada spark-dev.js? He estado tratando de usar gato pero no llegué muy lejos. Este es mi primer archivo MAKE que he escrito.

EDITAR Probé este código con el gato

spark-dev.js: ${modules} 
    cat [email protected] $^ 
+0

¿Cómo, específicamente, trataste de usar el gato? ¿Y qué salió mal? – slowdog

+0

@slowdog He puesto el código que probé en mi edición. – Olical

+0

@slowdog Oh, y en cuanto a qué salió mal, se hizo eco del contenido de todos los archivos impresos: 'make: *** [spark-dev.js] Error 1' – Olical

Respuesta

9

Eras casi allí :-) Esto debería funcionar:

spark-dev.js: ${modules} 
    cat > [email protected] $^ 

Antecedentes: La función de cat es a (intentar) abra todos los archivos enumerados en su línea de comando y vacíe los contenidos en stdout. El shell entiende por sintaxis > [email protected] que significa "crea el archivo [email protected], y conecta el stdout de este comando a él", por lo que ahora terminamos con el contenido de $^ combinados en [email protected].

+0

Hmm, lo detuve imprimiendo el contenido, pero ahora está arrojando este error: 'makefile: 23: *** separador faltante. Detener.' – Olical

+0

Asegúrese de tener un carácter de tabulación, no espacios, al comienzo de la línea con el comando 'cat'. Copiar fragmentos de makefile dentro y fuera de los navegadores es un problema porque las pestañas tienden a convertirse mágicamente en espacios ... – slowdog

+0

Bien, ahora está funcionando, pero solo ejecutando el primer comando, ¿hay alguna forma de ejecutar ambos? – Olical

Cuestiones relacionadas