Ответ 1
Способ сделать это - то, что делает bootstrap - есть файл, который импортирует все остальные и компилирует это.
@import "variables.less";
@import "mixins.less";
У меня есть каталог, полный меньше файлов css. Каков наилучший способ скомпилировать их для обычного css? (для развертывания)
Мне нравится запускать команду следующим образом:
lessc -r less/ css/
где lessc меньше компилятора (устанавливается через диспетчер пакетов node)
Способ сделать это - то, что делает bootstrap - есть файл, который импортирует все остальные и компилирует это.
@import "variables.less";
@import "mixins.less";
Вы можете использовать следующий bash однострочный файл для компиляции и все меньше файлов в каталоге и его подкаталогах в один файл css "combined.css":
$ find less_directory/ -name '*.less' -exec lessc {} \; > combined.css
Или уменьшен для производства:
$ find less_directory/ -name '*.less' -exec lessc -x {} \; > combined.css
Если вы хотите скомпилировать несколько файлов меньше в несколько файлов css, попробуйте один однострочный bash script:
for file in *.less; do lessc -x --yui-compress -O2 --strict-imports $file `basename $file`.css ; done
После выполнения команды вы получите список файлов .less.css.
PS: он дополнительно оптимизирует (-O2) максимум, сжимает (-x) и уменьшает с помощью YUI Compressor (--yui-compress ) со строгой оценкой импорта (--strict-import).
EDITED: для новых версий компрессора YUI skip -02 и -yui-compress устарели, поэтому:
for file in *.less; do lessc -x --strict-imports $file `basename $file`.css ; done
Этот bash script работает для меня:
find "$PWD" -name '*.less' | while read line; do
REPLACE=`echo $line | sed "s|\.less|\.css|"`
# echo "$line --> $REPLACE"
(lessc "$line" "$REPLACE" &)
done
Я сделал это ОЧЕНЬ простым bash script для компиляции всех LESS файлов в каталоге в CSS
#/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
Я написал хакерский script, который решает проблему:
#!/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))]
В идеале есть лучшее решение.
Я только что сделал script поверх работы @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 лучше всего и решает большинство проблем с ним, он по-прежнему очень рад использовать bash в среде linux.
Недавно у меня возникли проблемы с запуском чего-то вроде
lessc directory/*.less foo.css
Вместо того, чтобы принимать разные LESS и выводить их в foo.css, он изменит второй файл в списке. Это не нормально со мной.
Чтобы решить эту проблему, я создал новый интерфейс с интерфейсом lessm
.
Вы можете проверить это на https://github.com/jive/lessm.
Как вы его используете,
lessm foo.less foo2.less ../bar/bazz.less -o output.css
На основании ответа shakaran, но вместо файлов .less.css он создает файлы .css(не используйте меньше в имени файла, ну только в том расширении, которое есть):
for file in *.less; do lessc -x --strict-imports $file `basename $file | sed -e "s/less/css/"` ; done
Просто нашел удивительный модуль npm, чтобы сделать это!:)
Установите его:
$ npm install [-g] lessc-each
Запустите его:
$ lessc-each ‹dir1› ‹dir2›
Где - это каталог меньших файлов для компиляции, а - это каталог для выходных файлов. Если не существует, он будет автоматически создан. Оба каталога должны относиться к текущему пути командной строки.
Во время просмотра всех других ответов никто из них не работал у меня. Я нашел хорошее решение для обработки своей ситуации в сочетании ответов.
Сначала вы скомпилируете все меньше файлов в 1 файл. Это потому, что это может вызвать ошибки (например, bootstrap).
cat less_directory/* > less_directory/combined.less
Теперь, когда в папке с меньшим количеством файлов меньше 1, вы можете скомпилировать этот css без него, вызывая проблемы:
lessc less_directory/combined.less > css/style.css
После этого, не забудьте выбросить comb.less, иначе это испортит следующий компилятор.
rm -f less_directory/combined.less
Вы можете автоматизировать этот процесс, сделав его пакетом script
Как я скомпилировал меньше файлов для соответствующих файлов css в текущем дереве папок:
find ./ -name '*.less' -type f -exec lessc {} {}.css \; -exec rename -f 's/.less.css/.css/' {}.css \;
Например, если у вас есть main.less
где-то в дереве папок, вы получите main.css
в той же папке.
Но для этого требуется команда rename
. Чтобы установить его с помощью Homebrew:
brew install rename
Если вы хотите скомпилировать все файлы LESS в дерево папок и подпапок в Windows. Следующее решение использует пакетный файл в Windows:
Файл compile-less.bat: @echo
cd ".\pages" for/r %%i in (*.less) do call lessc --clean-css "%%~i" "%%~dpni.min.css" cd..@echo
cd ".\pages" for/r %%i in (*.less) do call lessc --clean-css "%%~i" "%%~dpni.min.css" cd..
РЕДАКТИРОВАНИЕ: Все меньше файлов в папке и подпапках будут скомпилированы. Протестировано в Windows 10 и 8.1
Вот идеальное решение.
Шаг 1. Создайте новый .less файл, содержащий оператор @import для каждого из ваших существующих файлов без.
find less_directory/ -name '*.less' -exec echo "@import \"{}\";" \; > combined.less
Шаг 2: Скомпилируйте объединенный файл .less.
lessc combined.less > compiled.css