Как скомпилировать каталог, содержащий меньше css файлов, для css?

У меня есть каталог, полный меньше файлов css. Каков наилучший способ скомпилировать их для обычного css? (для развертывания)

Мне нравится запускать команду следующим образом:

lessc -r less/ css/

где lessc меньше компилятора (устанавливается через диспетчер пакетов node)

Ответ 1

Способ сделать это - то, что делает bootstrap - есть файл, который импортирует все остальные и компилирует это.

@import "variables.less"; 
@import "mixins.less";

Ответ 2

Вы можете использовать следующий bash однострочный файл для компиляции и все меньше файлов в каталоге и его подкаталогах в один файл css "combined.css":

$ find less_directory/ -name '*.less' -exec lessc {} \; > combined.css

Или уменьшен для производства:

$ find less_directory/ -name '*.less' -exec lessc -x {} \; > combined.css

Ответ 3

Если вы хотите скомпилировать несколько файлов меньше в несколько файлов 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

Ответ 4

Этот bash script работает для меня:

find "$PWD" -name '*.less' | while read line; do
    REPLACE=`echo $line | sed "s|\.less|\.css|"`

    # echo "$line --> $REPLACE"
    (lessc "$line" "$REPLACE" &)
done

Ответ 5

Я сделал это ОЧЕНЬ простым 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

Ответ 6

Я написал хакерский 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))]

В идеале есть лучшее решение.

Ответ 7

Я только что сделал 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.

Ответ 8

Недавно у меня возникли проблемы с запуском чего-то вроде

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

Ответ 9

На основании ответа shakaran, но вместо файлов .less.css он создает файлы .css(не используйте меньше в имени файла, ну только в том расширении, которое есть):

for file in *.less; do lessc -x --strict-imports $file `basename $file | sed -e "s/less/css/"` ; done

Ответ 10

Просто нашел удивительный модуль npm, чтобы сделать это!:)

Установите его:

$ npm install [-g] lessc-each

Запустите его:

$ lessc-each  ‹dir1›  ‹dir2›

Где - это каталог меньших файлов для компиляции, а - это каталог для выходных файлов. Если не существует, он будет автоматически создан. Оба каталога должны относиться к текущему пути командной строки.

Ответ 11

Во время просмотра всех других ответов никто из них не работал у меня. Я нашел хорошее решение для обработки своей ситуации в сочетании ответов.

Сначала вы скомпилируете все меньше файлов в 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

Ответ 12

Как я скомпилировал меньше файлов для соответствующих файлов 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

Ответ 13

Если вы хотите скомпилировать все файлы 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

Ответ 14

Вот идеальное решение.

Шаг 1. Создайте новый .less файл, содержащий оператор @import для каждого из ваших существующих файлов без.

find less_directory/ -name '*.less' -exec echo "@import \"{}\";" \; > combined.less

Шаг 2: Скомпилируйте объединенный файл .less.

lessc combined.less > compiled.css