我有一个包含较少 css 文件的目录。将它们编译为普通 css 的最佳方法是什么?(用于部署)
我想运行如下命令:
lessc -r less/ css/
其中 lessc 是较少的编译器(通过节点包管理器安装)
这样做的方法是引导程序所做的 - 有一个文件可以导入所有其他文件并编译它。
@import "variables.less";
@import "mixins.less";
您可以使用以下 bash one-liner 将目录及其子目录中的所有 less 文件编译为单个 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)并使用YUI 压缩器(--yui-compress)和严格的导入评估(--strict-imports)缩小。
已编辑:对于新的 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
我制作了这个非常简单的 bash 脚本来将目录中的所有 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
我刚刚在@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还是很开心的。
我写了一个解决问题的hackish脚本:
#!/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 中,而是会修改列表中的第二个文件。这对我不好。
为了解决这个问题,我做了一个新的 less 前端,叫做lessm
.
您可以在https://github.com/jive/lessm查看。
你使用它的方式是
lessm foo.less foo2.less ../bar/bazz.less -o output.css
如果您希望将所有 LESS 文件编译到 Windows 中的文件夹和子文件夹树中。以下解决方案在 Windows 中使用批处理文件:
文件 compile-less.bat:
@echo
cd ".\pages"
for /r %%i in (*.less) do call lessc --clean-css "%%~i" "%%~dpni.min.css"
cd ..
已编辑:将编译文件夹和子文件夹中的所有 less 文件。在 Windows 10 和 8.1 中测试
在浏览所有其他答案时,没有一个对我有用。我找到了一个很好的解决方案来结合答案来处理我的情况。
首先,您将所有较少的文件编译成 1 个较少的文件。这是因为它可能会引发错误(如引导程序)。
cat less_directory/* > less_directory/combined.less
现在您在 less 文件夹中有 1 个文件,您可以编译该 css 而不会导致任何问题:
lessc less_directory/combined.less > css/style.css
在此之后,不要忘记扔掉combined.less,否则会搞砸下一次编译。
rm -f less_directory/combined.less
您可以通过将其设为批处理脚本来自动化此过程
我编译less文件到当前文件夹树中对应的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
这是理想的解决方案。
第 1 步:创建一个新的 .less 文件,其中包含每个现有 .less 文件的 @import 语句。
find less_directory/ -name '*.less' -exec echo "@import \"{}\";" \; > combined.less
第 2 步:编译组合的 .less 文件。
lessc combined.less > compiled.css