私の友人のデザイナーは、自分の LESS ファイルを手動でコンパイルし、Coda (リモート サイト) にアップロードするのに多くの貴重な時間を費やしていました。彼は私に尋ねました:
Linux サーバー上のファイルの変更を自動的に検出し、遅延なくコンパイルすることはできますか?
スクリプトを作成し、詳細を公開します。
まず、コンソールに次のように入力して、サーバーに「npm」をインストールする必要があります。
sudo apt-get install npm inotify-tools
sudo npm install -g less
sudo nano /usr/local/bin/lesscwatch
以下をファイルに貼り付けます。
#!/bin/bash
# Detect changes in .less file and automatically compile into .css
[ "$2" ] || { echo "Specify both .less and .css files"; exit 1; }
inotifywait . -m -e close_write | while read x op f; do.
if [ "$f" == "$1" ]; then.
lessc $f > $2 && echo "`date`: COMPILED";.
fi
done
保存して終了し、実行します。
sudo chmod +x /usr/local/bin/lesscwatch
これで完了です。次に LESS ファイルを操作する必要がある場合は、ターミナル (Coda にはビルトインがあります) を開き、(cd を使用して) ファイルのフォルダーに移動し、これを実行する必要があります。
lesscwatch main.less main.css
成功したコンパイルまたはエラーに関する情報を出力します。楽しみ。
ディレクトリ内のLessファイルが変更されたときに再コンパイルされるように、@romaninshのソリューションを変更しました。また、コンパイルに数秒かかる場合に変更が検出されたことを確認するために、Less ファイルをコンパイルする前に echo ステートメントを追加しました。
/usr/local/bin/lesscwatch:
#!/bin/bash
# Detect changes in .less file and automatically compile into .css
[ "$2" ] || { echo "Specify both .less and .css files"; exit 1; }
inotifywait . -m -e close_write | while read x op f; do
if [[ "$f" == *".less" ]]; then
echo "Change detected. Recompiling...";
lessc $1 > $2 && echo "`date`: COMPILED";
fi
done
これは、私が慣れ親しんでいる Mac 用の Less.app の動作をより厳密に模倣しています。
Less で開発する場合、私は通常、プロジェクトの /style ディレクトリに多数のファイルを置き、オーバーライドを使用してすべてを 1 つの .css ファイルにコンパイルします。
使用例:
base.less:
@import "overrides.less";
@import "variables.less";
body {
...
}
使い方は同じです
lesscwatch base.less base.css
bashスクリプトが欲しいのですが、ubuntu 12.10で崇高に使用するのに問題がありました。まあ、スクリプトはIan_Marcinkowskiと同じことをしましたが、最初のイベントの後も動作し続け、すべてのファイルを監視していると確信しています (何らかの方法で崇高なテキストを使用し、tmp ファイルを使用し、元のファイルを変更しないでください - !?!)。
#!/bin/bash
# Detect changes in .less file and automatically compile into .css
[ "$2" ] || { echo "Specify both .less and .css files"; exit 1; }
inotifywait -m -e close_write . | while read x op f; do
echo $f
echo "Change detected. Recompiling...";
lessc $2 > $3 && echo "`date`: COMPILED";
done
次のようにスクリプトを呼び出します。
./monitor.sh </path/to/dir> <main.less> <main.css>