递归压缩JavaScript文件的目录到一个文件
问题描述:
我希望能够在我的项目文件夹中运行一个命令,将所有的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开发机器上执行。
答
我最终的建筑,使用JSON文件列出所有应用程序所需的全部文件的解决方案的模式。在开发环境中,文件由浏览器单独加载。在生产服务器上,加载大编译文件。在我的开发机器上,我手动运行一个命令遍历每个文件,将它附加到一个大的JS文件并运行YUI Compressor。
这是一个小哈克,但在这里它是: https://github.com/renownedmedia/js-compressor
答
find . -iname "*.js" -exec cat "{}" \; > singlefile.js
[JS compressor] singlefile.js
首先连接文件,然后压缩它们。
如果你真的在乎,你可能需要一个像RequireJS优化器这样的真正的JS优化器。
答
下面的脚本将按照您的配置文件的顺序和使用给予
#!/bin/bash
shopt -s nullglob;
while read config; do
cat $config >> out.js
done < /path/to/config/file
答
给出的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
链接给我404 – Lucio 2014-01-29 02:26:30