8

プロジェクト フォルダーで 1 つのコマンドを実行して、すべての JavaScript ファイル (おそらく YUI Compressor を使用) を連結して 1 つの出力ファイルに圧縮できるようにしたいと考えています。

可能であれば、それらが連結される順序を部分的に指定したいと思いますが、すべての JavaScript ファイルを追跡する必要はありません。おそらく、次のような構成ファイルを作成できます。

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

このようなことを行うための既存のツールを知っている人はいますか? 低帯域幅の人々が消費するために、JS の使用量が多い (〜 40 ファイル) シングルページアプリを構築しています。

OS X 開発マシンでソリューションを実行できるようにする必要があります。

4

4 に答える 4

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

最初にファイルを連結してから圧縮します。

ただし、本当に気にする場合は、RequireJS オプティマイザーのような実際の JS オプティマイザーが必要になる場合があります。

于 2012-01-29T00:16:40.923 に答える
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 で失敗する場合はお知らせください。

于 2012-02-19T23:00:57.797 に答える
0

最終的に、json ファイルを使用してアプリに必要なすべてのファイルを一覧表示するソリューションを構築しました。開発環境では、ファイルはブラウザによって個別にロードされます。運用サーバーでは、大きなコンパイル済みファイルがロードされます。私の開発マシンでは、手動でコマンドを実行して各ファイルを繰り返し処理し、それを大きな JS ファイルに追加して YUI Compressor を実行しました。

少しハックですが、 https ://github.com/renownedmedia/js-compressor です。

于 2012-02-08T05:24:10.947 に答える
0

次のスクリプトは、構成ファイルの順序に従い、指定されたパターンを使用します

#!/bin/bash

shopt -s nullglob;
while read config; do
  cat $config >> out.js
done < /path/to/config/file
于 2012-01-29T00:21:15.620 に答える