В PHP есть два компилятора LessCSS, о которых я знаю:
Оба утверждают, что они совместимы с Bootstrap (версия 3). Однако я изо всех сил пытаюсь получить что-либо, учитывая крутую кривую обучения этих трех аспектов. Короче говоря, я просто хочу добиться следующего:
Скомпилируйте несколько файлов .less в PHP:
Компиляция одного файла в файле 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
являются опечатками: они должны быть одной и той же переменной. Но, прочитав документацию и посмотрев на источник, я бросил попытку разобраться, если следующие строки точно передавали свою цель:
/var/www/mysite/bootstrap.less
– Является ли это тем меньше файлов для компиляции? /mysite/
– что это за ??? /var/www/writable_folder
– Это где написано css? my.less
кто-нибудь даст мне фрагмент, который будет компилировать bootstrap.less
и my.less
в css-файл (ы) с помощью 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);
ура