所以我使用Less PHP将.less
文件编译为.css
,我决定尝试一个我编写的小类,我将所有.less
个文件放入一个目录并将它们编译为.css并将它们移动到它们自己的css目录。
所以为了测试这个,我把所有的twitter bootstrap减去并放入一个目录然后运行我编写的类,见下文,发现更少的php爆炸:当前的错误是:
Error occurred:exception 'Exception' with message 'variable @alert-padding is undefined: failed at 'padding: @alert-padding;'
我写的课只是一个简单的包装器:
class AisisLess_Less_Less{
protected $_less = null;
protected $_file = null;
public function __construct(){
$this->_file = new AisisCore_FileHandling_File();
$this->_less = new lessc();
$this->init();
}
public function init(){}
public function compile_directory($pattern, $compile_to_dir){
$less_files = $this->_file->get_directory_of_files($pattern);
$this->_compile($less_files, $compile_to_dir);
}
protected function _compile($array_of_files, $compile_directory){
foreach($array_of_files as $file){
$file_without_path = substr( $file, strrpos( $file, '/' )+1 );
try{
$css_file = preg_replace('"\.less"', '.css', $file_without_path);
$this->_less->checkedCompile($file, $compile_directory . $css_file);
}catch(exception $e){
throw new AisisLess_Exceptions_LessException('Error occurred:' . $e);
}
}
}
}
这个概念是你这样使用的:
$less = new AisisLess_Less_Less();
$less->compile_directory(path/to/less/*.less, path/to/compiled/out/put);
我的代码只是一个简单的包装器。较少的库会在一些变量上抛出实际错误,这些变量就是bootstrap less文件的一部分。
图书馆正在运作或者是否在编码时失败,或者我搞砸了什么?
如果是这样,我该如何解决这个问题?
答案 0 :(得分:4)
我怀疑(没有证据)。如果我理解正确,你只需拥有bootstrap文件目录,你的代码将通过它们运行顺序将它们编译为css。这意味着它正在尝试编译的第一个文件是alerts.less
,在第10行,它是第一个变量引用in that file(在撰写本文时):
padding: @alert-padding;
这符合您的错误。
问题很可能是bootstrap文件不是为了盲目编译而设计的,因为在大多数情况下每个文件都是它自己的小块,但需要编译其他关键部分(如variables.less
和{{1 }})。这就是为什么,一般来说,你只编译bootstrap.less
文件,然后mixins.less
所有必要的文件。
基本上,如果我正确理解您的设计和工作方式,您选择了一组错误的文件来运行测试,因为它们不是以这种方式工作的。最好只创建一些彼此独立的少量文件进行测试。然而,这揭示了你的计划有一个潜在的缺陷,因为它只能在独立文件上运行,所以你不能盲目地通过它运行任何@import
文件,否则你会因为破坏而得到这样的编译错误的依赖关系。