AFAIK http://leafo.net/lessphp/与 Boostrap 3 > 3.0.0 不兼容,请参阅https://github.com/leafo/lessphp/issues/503
http://lessphp.gpeasy.com/为我工作我已经成功地将它用于 JBST ( https://github.com/bassjobsen/jamedo-bootstrap-start-theme/issues/82 ) 我没有使用缓存功能。
如果没有缓存,您可以调用$parser->parseFile()包含的每个文件,它将编译为一个文件。array(/var/www/mysite/bootstrap.less' => '/mysite/');. 对多个文件使用数组数组:array(array(/var/www/mysite/bootstrap.less' => '/mysite/'), array(/var/www/mysite/.less' => '/mysite/'));
<?php
$parser = new Less_Parser();
$parser->parseFile( '/var/www/mysite/bootstrap.less', 'http://example.com/mysite/' );
$parser->parseFile( '/var/www/mysite/mainless.css', 'http://example.com/mysite/' );
$css = $parser->getCss();
Less_Cache::Get 似乎一次只能处理一个文件。
更新正如@user697576 所评论的,Less_Cache::Get()接受单个文件或列表(文件数组)。单个文件将像数组一样array(/var/www/mysite/bootstrap.less' => '/mysite/');
从文档:
使用 Less_Cache 类来保存和重用编译过的 less 文件的结果。这个方法我们检查每个less文件(包括导入的文件)的修改时间,发现修改后重新生成。
我强调包括导入的文件,因为这似乎可以解决您的问题。使用 LESS 合并您的文件:
样式少:
@import "my.less";
@import "mainless.css";
并且只编译styles.less。
/var/www/mysite/bootstrap.less - 这是要编译的更少文件吗?
是的,为什么不?确保在 bootstrap.less 中导入的文件与 bootstrap.less 在同一目录中可用,或用于$parser->SetImportDirs()设置正确的路径。
/mysite/ - 这是干什么用的??
它设置了正确的路径。如果您的 LESS 文件包含例如url(image.png)它输出url( /mysite/image.png). 注意 Bootstrap 使用 ../ 作为字形图标的路径,这不会被更正,甚至更糟的是变成 /mysite/../。您必须在 LESS 中设置此路径:@icon-font-path: "/mysite/fonts/";
/var/www/writable_folder - 这是写入 css 的地方吗?
不$compiled = file_get_contents( '/var/www/writable_folder/'.$css_file_name ); $compiled包含(编译的)CSS之后,您必须将其写入文件。或者使用: $css_file_name = Less_Cache::Get( $to_cache ); 在您的 HTML 中:
<link rel="stylesheet" type="text/css" href="/writable_folder/<?php echo $css_file_name;?>">
更新
请注意,自 Bootstrap 3.2.0 以来。Bootstrap 中属性的前缀是由构建过程中的 autoprefixer 完成的。前面的意思是 Bootstrap Less 代码包含属性声明,它只使用 W3C 语法,而跨浏览器支持需要前缀。用 less.php 编译你的源代码不会运行 autoprefixer。另见:https ://github.com/oyejorge/less.php/issues/158