少PHP破坏了吗?

时间:2014-02-05 00:47:02

标签: php less

所以我使用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文件的一部分。

图书馆正在运作或者是否在编码时失败,或者我搞砸了什么?

如果是这样,我该如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

我怀疑(没有证据)。如果我理解正确,你只需拥有bootstrap文件目录,你的代码将通过它们运行顺序将它们编译为css。这意味着它正在尝试编译的第一个文件是alerts.less,在第10行,它是第一个变量引用in that file(在撰写本文时):

padding: @alert-padding;

这符合您的错误。

问题很可能是bootstrap文件不是为了盲目编译而设计的,因为在大多数情况下每个文件都是它自己的小块,但需要编译其他关键部分(如variables.less和{{1 }})。这就是为什么,一般来说,你只编译bootstrap.less文件,然后mixins.less所有必要的文件。

基本上,如果我正确理解您的设计和工作方式,您选择了一组错误的文件来运行测试,因为它们不是以这种方式工作的。最好只创建一些彼此独立的少量文件进行测试。然而,这揭示了你的计划有一个潜在的缺陷,因为它只能在独立文件上运行,所以你不能盲目地通过它运行任何@import文件,否则你会因为破坏而得到这样的编译错误的依赖关系。