2012-01-29 117 views
8

我希望能够在我的项目文件夹中运行一个命令,将所有的JavaScript文件(可能与YUI压缩器)连接并压缩到一个输出文件中。递归压缩JavaScript文件的目录到一个文件

如果可能,我想部分指定它们连接在一起的顺序,但不必跟踪每一个JavaScript文件。也许一个配置文件可以建立它看起来像这样:

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

有谁知道一个现有的工具做这样的事情的,可能会掀起一起庆典/红宝石/节点/ perl脚本,甚至更好方法?我正在构建一个单页面应用程序,它使用JS(约40个文件)的重量,供低带宽用户使用。

我需要的解决方案可以在我的OS X开发机器上执行。

回答

0

我最终的建筑,使用JSON文件列出所有应用程序所需的全部文件的解决方案的模式。在开发环境中,文件由浏览器单独加载。在生产服务器上,加载大编译文件。在我的开发机器上,我手动运行一个命令遍历每个文件,将它附加到一个大的JS文件并运行YUI Compressor。

这是一个小哈克,但在这里它是: https://github.com/renownedmedia/js-compressor

+0

链接给我404 – Lucio 2014-01-29 02:26:30

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

首先连接文件,然后压缩它们。

如果你真的在乎,你可能需要一个像RequireJS优化器这样的真正的JS优化器。

0

下面的脚本将按照您的配置文件的顺序和使用给予

#!/bin/bash 

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

给出的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 

有稍微修改配置文件:

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 

这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 

,你会发现“合并”的脚本在所有的脚本乳宁后脚本:

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 

让我知道,如果你需要我解释脚本或者未能在OS X