より少ないcssファイルでいっぱいのディレクトリがあります。それらを通常のcssにコンパイルする最良の方法は何ですか? (展開用)
次のようにコマンドを実行したいと思います。
lessc -r less/ css/
ここで、lessc は less コンパイラ (ノード パッケージ マネージャー経由でインストール) です。
次の bash ワンライナーを使用して、ディレクトリとそのサブディレクトリ内のすべてのファイルを単一の css ファイル「combined.css」にコンパイルできます。
$ find less_directory/ -name '*.less' -exec lessc {} \; > combined.css
または本番用に縮小:
$ find less_directory/ -name '*.less' -exec lessc -x {} \; > combined.css
複数の less ファイルを複数の css ファイルにコンパイルする場合は、次のワンライナー bash スクリプトを試してください。
for file in *.less; do lessc -x --yui-compress -O2 --strict-imports $file `basename $file`.css ; done
コマンドを実行すると、.less.css ファイルのリストが表示されます。
PS: さらに最適化 ( -O2 ) し、最大で圧縮 ( -x )し、厳密なインポート評価 ( --strict-imports ) でYUI コンプレッサー( --yui-compress ) で縮小します。
EDITED : 新しい YUI Compressor バージョンでは、スキップ -02 および --yui-compress 非推奨のため、次のようになります。
for file in *.less; do lessc -x --strict-imports $file `basename $file`.css ; done
このbashスクリプトは私のために働きます:
find "$PWD" -name '*.less' | while read line; do
REPLACE=`echo $line | sed "s|\.less|\.css|"`
# echo "$line --> $REPLACE"
(lessc "$line" "$REPLACE" &)
done
ディレクトリ内のすべてのLESSファイルをCSSにコンパイルするために、この非常に単純なbashスクリプトを作成しました
#/bin/bash
echo "Compiling all LESS files to CSS"
for file in *.less
do
FROM=$file
TO=${file/.*/.css}
echo "$FROM --> $TO"
lessc $FROM $TO
done
@iloveitaly の作品の上にスクリプトを作成しました。
#!/bin/bash
# file name: lesscdir
if [[ -z $1 || -z $2 ]];then
echo 'both arguments are needed'
exit
fi
find $1 -name '*.less' -printf '%P\n' | while read name; do
FROM=$(echo $1'/'$name)
TO=$(echo $2'/'$name | sed "s|\.less|\.css|")
TO_DIRNAME=$(dirname $TO)
if [ ! -e $TO_DIRNAME ];then
mkdir -p $TO_DIRNAME
fi
echo 'Compiling' $FROM '->' $TO
lessc $FROM $TO
done
その後:
$ chmod +x lesscdir
$ sudo ln -s $(readlink -f lesscdir) /usr/local/bin/
私は python が一番好きでほとんどの問題を解決してくれますが、それでも Linux 環境で bash を使うのはとても楽しいです。
問題を解決するハックスクリプトを作成しました:
#!/usr/bin/env python
#This is responsible for "compiling" less.css files to regular css files for production. It also minifies the css at the same time.
#Usage: give it a start directory as the first parameter and an end directory as the second parameter. It will recursivly run the appropriate command for all css files in the first subdirectory.
import os
import sys
import re
if len(sys.argv) < 3:
sys.exit('ERROR: Too many paths!! No less css compiled')
if len(sys.argv) > 3:
sys.exit('ERROR: Not enough paths!! No less css compiled')
start_dir=os.path.join(os.getcwd(),sys.argv[1])
end_dir=os.path.join(os.getcwd(),sys.argv[2])
pattern=r'\.css$'
pattern=re.compile(pattern)
files_compiled=0
def copy_files(start, end, add=''):
global files_compiled
try:
os.mkdir(end)
except:
pass
for folder in get_immediate_subdirectories(start):
copy_files(os.path.join(start,folder), os.path.join(end+folder), add+folder+'/')
for less in os.listdir(start):
if pattern.search(less):
os.system('lessc -x %s > %s'%(start+less,end+less))
print add+less
files_compiled=files_compiled+1
def get_immediate_subdirectories(dir):
return [name for name in os.listdir(dir)
if os.path.isdir(os.path.join(dir, name))]
理想的には、より良い解決策があります。
Shakaran の回答に基づいていますが、.less.css ファイルの代わりに .css ファイルを作成します (ファイル名に less を使用しないでください。拡張子のみに使用してください)。
for file in *.less; do lessc -x --strict-imports $file `basename $file | sed -e "s/less/css/"` ; done
最近、次のようなものを実行する際に問題が発生しました
lessc directory/*.less foo.css
異なる LESS を取得して foo.css に出力する代わりに、リストの 2 番目のファイルを変更します。これは私にはよくありません。
この問題を解決するために、私は という新しいレス フロントエンドを作成しましたlessm
。
https://github.com/jive/lessmで確認できます。
あなたがそれを使用する方法は
lessm foo.less foo2.less ../bar/bazz.less -o output.css
これが理想的なソリューションです。
ステップ 1: 既存の .less ファイルごとに @import ステートメントを含む新しい .less ファイルを作成します。
find less_directory/ -name '*.less' -exec echo "@import \"{}\";" \; > combined.less
ステップ 2: 結合された .less ファイルをコンパイルします。
lessc combined.less > compiled.css