2012-01-29 11 views
8

Me gustaría poder ejecutar un solo comando en mi carpeta de proyecto para concatenar y comprimir todos mis archivos javascript (quizás con YUI Compressor) en un único archivo de salida.comprime recursivamente el directorio de archivos javascript en un solo archivo

De ser posible, me gustaría especificar parcialmente el orden en que se concatenan entre sí, pero no tengo que hacer un seguimiento de cada uno de los archivos javascript. Tal vez un archivo de configuración se puede construir con la apariencia siguiente:

application.js 
excanvas.js 
json2.js 
jquery*.js 
flot/* 
backbone*.js 
app/screen-*.js 
app/main.js 
app/crud-*.js 
app/* 
* 

¿Alguien sabe de cualquiera de una herramienta existente para hacer algo como esto, podría azotar junto a/ruby ​​/ nodo/script en perl bash, o incluso una mejor ¿metodología? Estoy construyendo una aplicación de una sola página con un uso pesado de JS (~ 40 archivos) para ser consumida por personas con poco ancho de banda.

Necesitaría que la solución sea ejecutable en mi máquina de desarrollo OS X.

Respuesta

0

Terminé la construcción de una solución que utiliza un archivo JSON para listar todos los archivos requeridos por la aplicación. En el entorno de desarrollo, el navegador carga los archivos individualmente. En el servidor de producción, se carga el gran archivo compilado. En mi máquina de desarrollo, ejecuto manualmente un comando para iterar sobre cada archivo, anexándolo a un gran archivo JS y ejecutando YUI Compressor.

Es un poco hacky, pero aquí está: https://github.com/renownedmedia/js-compressor

+0

enlaces me dan 404 – Lucio

3
find . -iname "*.js" -exec cat "{}" \; > singlefile.js 
[JS compressor] singlefile.js 

Primero concatenar los archivos, luego comprimirlos.

Si realmente te importa, es posible que desees un optimizador JS real como el optimizador RequireJS.

0

El siguiente script seguirá el orden de su archivo de configuración y el uso de los patrones dados

#!/bin/bash 

shopt -s nullglob; 
while read config; do 
    cat $config >> out.js 
done < /path/to/config/file 
2

dado una carpeta de archivos javascript:

geee: ~/src/bash/js-files 
$ find . 
. 
./application.js 
./jquery-ui.js 
./all-scripts.js 
./cp.js 
./excanvas.js 
./backbone-worldwide.js 
./jquery-plugin.js 
./.found 
./app 
./app/crud-sel.js 
./app/screen-detach.js 
./app/aligator.js 
./app/crud-in.js 
./app/giraffe.js 
./app/screen-attach.js 
./app/main.js 
./app/crud-del.js 
./app/mouse.js 
./app/monkey.js 
./app/screen-shot.js 
./backbone-national.js 
./backbone23.js 
./ummap.js 
./CONFIG 
./backbone-ibm.js 
./ieee754.js 
./flot 
./flot/cow.js 
./flot/moo.js 
./flot/cat.js 
./flot/bull.js 
./flot/dog.js 
./flot/sheep.js 
./lines 
./droiddraw-r1b21 
./droiddraw-r1b21/._readme.txt 
./droiddraw-r1b21/readme.js 
./droiddraw-r1b21/LICENSE.js 
./jquery-1.7.js 
./ole.js 
./touch 
./json2.js 
./xls2txt.js 
./DO.sh 
./backbone-isp.js 

con un archivo de configuración ligeramente modificada:

geee: ~/src/bash/js-files 
$ cat CONFIG 
application.js 
excanvas.js 
json2.js 
jquery*.js 
flot/* 
backbone*.js 
app/screen-*.js 
app/main.js 
app/crud-*.js 
app/*js 
*js 

y esto script bash:

$ cat DO.sh 
PROJECT=/home/jaroslav/src/bash/js-files  # top folder of the web-app 
SUPERJS=${PROJECT}/all-scripts.js 
CONFIG=${PROJECT}/CONFIG      # your the priority file (notice *js) 
FOUND=${PROJECT}/.found       # where to save results 
JSMIN=$HOME/bin/jsmin       # change to /usr/local/bin/jsmin or some other tool 

echo > $FOUND         # remove results from previous run 

if [ ! -x $JSMIN ] 
then 
     TMPJSMIN=/tmp/jsmin.c 
     wget -q https://github.com/douglascrockford/JSMin/raw/master/jsmin.c -O $TMPJSMIN & FOR=$? 
     echo "fetching jsmin (by Douglas Crockford) from github" 
     wait $FOR 
     gcc -o $JSMIN $TMPJSMIN 
fi 




cat $CONFIG | \ 
     while read priority 
     do 
       eval "find $priority|sort -n" | \ 
         while read amatch; 
         do 
           grep -q $amatch $FOUND || echo $amatch >> $FOUND 
         done 
     done 
echo minifying: 
cat $FOUND 
cat `cat $FOUND` | $JSMIN > $SUPERJS 

se encuentra el "fusionado" guión en todos los scripts después de runing el guión:

geee: ~/src/bash/js-files 
$ . DO.sh 
fetching jsmin (by Douglas Crockford) from github 
[1]+ Done     wget -q https://github.com/douglascrockford/JSMin/raw/master/jsmin.c -O $TMPJSMIN 
minifying: 

application.js 
excanvas.js 
json2.js 
jquery-1.7.js 
jquery-plugin.js 
jquery-ui.js 
flot/bull.js 
flot/cat.js 
flot/cow.js 
flot/dog.js 
flot/moo.js 
flot/sheep.js 
backbone23.js 
backbone-ibm.js 
backbone-isp.js 
backbone-national.js 
backbone-worldwide.js 
app/screen-attach.js 
app/screen-detach.js 
app/screen-shot.js 
app/main.js 
app/crud-del.js 
app/crud-in.js 
app/crud-sel.js 
app/aligator.js 
app/giraffe.js 
app/monkey.js 
app/mouse.js 
all-scripts.js 
cp.js 
ieee754.js 
ole.js 
ummap.js 
xls2txt.js 

Avísame si me necesita para explicar la secuencia de comandos o si se produce un error en OS X.

Cuestiones relacionadas