10

我知道 PHP 中有两个 LessCSS 编译器:

两者都声称与 Bootstrap(版本 3)兼容。然而,鉴于这三个方面的陡峭学习曲线,我正在努力让一切顺利进行。简而言之,我只想实现以下目标:

在 PHP 中一起编译多个 .less 文件:

  1. 无引导程序
  2. 我的.less

编译单个文件leafo.net/lessphp很容易,我发现:

require_once 'lessc.inc.php'; 
$less = new lessc;
$less->checkedCompile("my.less", "mainless.css");

但是我不确定该库是否是为多个文件设计的。(如果是这样,怎么可能/应该这样做?)

我决定转向一个不同的库,它明确展示了如何为引导程序编译:lessphp.gpeasy.com. 然而,他们的示例片段让我摸不着头脑(取自这里):

<?php
require 'less.php/LessCache.php';
$files = array( '/var/www/mysite/bootstrap.less' => '/mysite/' );
Less_Cache::$cache_dir = '/var/www/writable_folder';
$css_file_name = Less_Cache::Get( $to_cache );
$compiled = file_get_contents( '/var/www/writable_folder/'.$css_file_name );

$files在查看了他们的其他示例后,我意识到这$to_cache是一个错字:它们应该是同一个变量。但是在阅读了文档并查看了源代码之后,我放弃了尝试确定以下字符串是否准确地传达了它们的目的:

  1. /var/www/mysite/bootstrap.less- 这是要编译的文件更少吗?
  2. /mysite/- 这个是来做什么的??
  3. /var/www/writable_folder- 这是写css的地方吗?

请有人给我一个片段,可以使用 PHP编译bootstrap.lessmy.less转换成 css 文件吗?

4

4 回答 4

10

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

于 2014-01-03T22:51:56.303 回答
1

使用http://leafo.net/lessphp的另一个解决方案:

1:获取 .less 文件的 css 代码:

$baseCSS = file_get_contents("style.less");

$baseCSS .= file_get_contents("default.less");//append the second file to the variable

2:编译使用:

$finalCSSCode = $less->compile($baseCSS);

干杯

于 2015-06-05T09:05:57.437 回答
0

老实说,我仍然试图了解让服务器编译 LESS 文件的优势,而不是在开发期间编译它们,然后在部署应用程序时将 CSS 加载到服务器上。对于服务器来说,这似乎是额外的工作,没有任何优势。我使用了一个名为 Prepros 的工具——它相当于 Windows 的 Code Kit。很容易设置。我在 LESS 中进行更改并保存。CSS 文件会自动重新编译并保存到我的开发机器上的应用程序文件夹中。当一切都如我所愿时,我会缩小文件并将它们移植到生产盒中。

于 2014-01-03T22:41:26.463 回答
0

唯一维护和当前最新的基于 PHP 的 LESS 编译器的 repo 似乎是来自 Wikimedia 的。

github.com/wikimedia/less.php

不明白为什么星星这么少。我已经从leafo 的lessphp 切换到它,只需将源代码添加到项目的供应商目录并要求供应商/lessphp/lessc.inc.php。其他一切似乎都与叶的图书馆一样工作。

于 2021-08-26T03:23:26.027 回答