2012-09-05 44 views
10

我想会发生以下情况:编译引用LESS文件导入CSS与PHP自动

  1. 有过程的自动化服务器端。

  2. 只需能够引用LESS文件就像我在我的代码中的CSS文件。

  3. 用户返回缩小的CSS而不是LESS文件 - 缓存,因此编译器不需要运行,除非LESS文件已更新。

  4. 为此与一起使用任何 LESS文件被引用在我的域中的任何地方。

我发现Lessphp,但文档不是很清楚,也没有说明如何动态地得到任何LESS文件给它。我以为我会张贴我是如何工作的,因为我没有看到如何使用PHP来实现这一目标。

回答

17

这个假设LESSPHP v0.3.8 +不确定早期版本,但是如果它不是开箱即用的,它会如何工作。

<link rel="stylesheet" type="text/css" href="styles/main.less" />

如果您正在使用less.js编译客户端,请确保您更改rel="stylesheet/less"rel="stylesheet"

1)抓住Lessphp我把这些文件在/www/compilers/lessphp/这个演示的背景下

2)制作一个PHP脚本,我们可以丢掉LESS文件。这将处理缓存,编译为CSS并返回CSS作为响应。我已将此文件放在/www/compilers/并称为lessphp.php

大部分代码都在Lessphp站点上,除了它有错误,并且我在最后添加了响应。

<?php 
require "lessphp/lessc.inc.php"; 
$file = $_GET["file"]; 
function autoCompileLess($inputFile, $outputFile) { 
    // load the cache 
    $cacheFile = $inputFile.".cache"; 
    if (file_exists($cacheFile)) { 
     $cache = unserialize(file_get_contents($cacheFile)); 
    } else { 
     $cache = $inputFile; 
    } 
    $less = new lessc; 
    $less->setFormatter("compressed"); 
    $newCache = $less->cachedCompile($cache); 
    if (!is_array($cache) || $newCache["updated"] > $cache["updated"]) { 
     file_put_contents($cacheFile, serialize($newCache)); 
     file_put_contents($outputFile, $newCache['compiled']); 
    } 
} 
autoCompileLess('../' . $file, '../' . $file . '.css'); 
header('Content-type: text/css'); 
readfile('../' . $file . '.css'); 
?> 

这将编译LESS文件(例如,styles/main.less)的缓存文件和CSS文件(例如,styles/main.less.css)。

3)添加mod_rewrite规则,以便将用户请求的任何LESS文件重定向到我们的编译器,并为其提供路径。这被放置在根文件.htaccess中。

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteBase/
    RewriteRule ^([^.]*\.less)$ compilers/lessphp.php?file=$1 [R,QSA,L] 
</ifModule> 

如果您正在使用WordPress,此规则将需要来之后 - 即使WordPress是一个子目录,它似乎覆盖这些规则,LESS编译不会使下述存在引用的文件发生(目录明智)WordPress的.htaccess规则。

4)您的LESS代码应该相对于编译器位置相对引用。此外,如果有空属性,Lessphp编译器将失败,例如。background-color: ;


如果一切运作良好,应会出现以下情况:

  1. 直接浏览你的LESS文件http://domain.com/styles/main.less

  2. 被自动重定向到http://domain.com/compilers/lessphp?file=styles/main.less

  3. 与介绍缩小的CSS

  4. main.less.cssmain.less.cache现在应该存在于相同的目录中LESS文件

  5. 除非你更新你的LESS文件的最后修改日期应该不会改变