Компиляция меньшего CSS для Bootstrap 3 с PHP

В PHP есть два компилятора LessCSS, о которых я знаю:

  • http://leafo.net/lessphp/
  • http://lessphp.gpeasy.com/

Оба утверждают, что они совместимы с Bootstrap (версия 3). Однако я изо всех сил пытаюсь получить что-либо, учитывая крутую кривую обучения этих трех аспектов. Короче говоря, я просто хочу добиться следующего:

Скомпилируйте несколько файлов .less в PHP:

  1. bootstrap.less
  2. my.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?

my.less кто-нибудь даст мне фрагмент, который будет компилировать bootstrap.less и my.less в css-файл (ы) с помощью PHP?

Solutions Collecting From Web of "Компиляция меньшего CSS для Bootstrap 3 с PHP"

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() для каждого $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, похоже, работает только для одного файла.

update Как комментируется @ user697576 Less_Cache::Get() принимает один файл или список (массив файлов). Один файл будет массивом, подобным array(/var/www/mysite/bootstrap.less' => '/mysite/');

Из документов:

Используйте класс Less_Cache для сохранения и повторного использования результатов скомпилированных файлов. Этот метод проверяет измененное время каждого меньшего файла ( включая импортированные файлы ) и восстанавливается при обнаружении изменений.

Я выделяю в том числе импортированные файлы, потому что это, похоже, решает вашу проблему. Слейте файлы с МЕНЬШЕ:

styles.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) . Примечание. Бутстрап использует ../ для пути глификонов, это не будет исправлено или даже хуже станет /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;?>"> 

update Обратите внимание, что с Bootstrap 3.2.0. префикс свойств в Bootstrap выполняется с помощью средства autoprefixer в процессе сборки. Предыдущее означает, что код кода Bootstrap Less содержит объявление свойства, в котором используется только синтаксис W3C, в то время как для поддержки кросс-браузера требуется префикс. Компиляция источника с помощью less.php не запускает средство autoprefixer. См. Также: https://github.com/oyejorge/less.php/issues/158

Честно говоря, я все еще пытаюсь понять преимущество того, что сервер компилирует файлы LESS, а не компилирует их во время разработки, а затем просто загружает CSS на сервер при развертывании приложения. Это просто кажется дополнительной работой для сервера без каких-либо преимуществ. Я использую инструмент под названием Prepros – эквивалент Windows Code Code. Его легко настроить. Я делаю свои изменения в LESS и сохраняю. Файлы CSS автоматически перекомпилируются и сохраняются в папке приложения на моей машине разработки. Когда все так, как я этого хочу, я уменьшаю файлы и переношу их в поле производства.

другое решение с использованием http://leafo.net/lessphp :

1: получить код css для ваших файлов .less:

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

2: скомпилировать, используя:

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

ура