Использование из командной строки

Открыть оригинал markdown source для "command-line-usage"

Компилируйте файлы .less в .css прямо из командной строки.

Если работа через консоль вам не подходит, посмотрите GUI-инструменты для Less.

Установка

Установите Less через npm:

npm install less -g

Опция -g делает команду lessc доступной глобально. Если нужна конкретная версия или тег, добавьте @VERSION после имени пакета. Например: npm install less@2.7.1 -g.

Установка для Node разработки

Если глобальная установка не нужна, можно поставить компилятор только в рамках проекта:

npm i less --save-dev

Так вы установите актуальную стабильную версию lessc в каталог проекта и одновременно добавите пакет в devDependencies вашего package.json.

Бета-версии lessc

По мере разработки новых возможностей в npm иногда публикуются бета-сборки lessc. Они _не_ выходят как официальный релиз @latest и обычно содержат пометку beta в номере версии. Текущую версию можно посмотреть командой lessc -v.

Патч-релизы мы публикуем сразу, а альфа-, бета- и release candidate версии выходят как минорные или мажорные обновления. Начиная с версии 1.4.0 проект старается придерживаться семантического версионирования.

Использование на стороне сервера и в командной строке

Бинарный файл bin/lessc, который входит в репозиторий, работает вместе с Node.js на *nix-системах, macOS и Windows.

Использование: lessc [option option=parameter ...] <source> [destination]

Использование командной строки

lessc [option option=parameter ...] <source> [destination]

Если в качестве источника указать -, ввод будет прочитан из stdin.

Примеры

Скомпилировать bootstrap.less в bootstrap.css:

lessc bootstrap.less bootstrap.css

Параметры, специфичные для lessc

Все остальные параметры см. в разделе Опции Less.js.

Тихо

меньше -s lessc --тихий

Останавливает отображение любых предупреждений.

Версия

lessc -v
lessc --version

Помощь

lessc --help
lessc -h

Печатает справочное сообщение с доступными опциями и завершает работу.

Makefile

lessc -M
lessc --depends

Выводит список зависимостей импорта make-файла на стандартный вывод.

Нет цвета

Устарело.

lessc --no-color

Очистить CSS

В версии less Clean CSS больше не включен в качестве прямой зависимости. Чтобы использовать чистый CSS с lessc, используйте плагин Clean CSS.


Использование в браузере

Открыть оригинал markdown source для "using-less-in-the-browser"

Запуск Less.js прямо в браузере - самый простой способ начать работу и удобный вариант для разработки. Но в production, где важны производительность и надежность, мы рекомендуем предварительно компилировать Less через Node.js или один из сторонних инструментов.

Для начала подключите .less-таблицы стилей с rel="stylesheet/less":

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

Затем загрузите less.js и подключите его в <head> через тег <script>:

<script src="less.js" type="text/javascript"></script>

Настройка опций

Опции можно задавать программно, объявив объект less до подключения скрипта. Тогда настройки применятся и к изначальным <link>-тегам, и к программному использованию Less.

<script>
  less = {
    env: "development",
    async: false,
    fileAsync: false,
    poll: 1000,
    functions: {},
    dumpLineNumbers: "comments",
    relativeUrls: false,
    rootpath: ":/a.com/"
  };
</script>
<script src="less.js"></script>

Второй вариант - указать параметры прямо на теге <script>:

<script>
  less = {
    env: "development"
  };
</script>
<script src="less.js" data-env="development"></script>

Для краткости часть настроек можно передать атрибутами на <script> и <link>:

<script src="less.js" data-poll="1000" data-relative-urls="false"></script>
<link data-dump-line-numbers="all" data-global-vars='{ "myvar": "#ddffee", "mystr": "\"quoted\"" }' rel="stylesheet/less" type="text/css" href="less/styles.less">

Поддержка браузеров

Less.js поддерживает все современные браузеры: актуальные версии Chrome, Firefox, Safari и Edge. Использовать Less на клиенте в production возможно, но нужно помнить о цене такого решения:

  • страдает производительность;
  • при JavaScript-ошибке могут появиться визуальные сбои;
  • вы обмениваете скорость и предсказуемость на гибкость.

Если вам нужен максимально быстрый статический сайт, лучше компилировать Less на сервере заранее.

Тем не менее у client-side Less есть и рабочие сценарии в production. Например, когда вы хотите дать пользователю возможность менять переменные темы и видеть результат в реальном времени.

Полезные замечания

  • Подключайте таблицы стилей раньше, чем скрипт Less.js.
  • Если вы подключаете несколько .less-файлов, каждый из них компилируется отдельно. Значит, переменные, миксины и пространства имен из одного файла недоступны в другом.
  • Из-за same-origin policy браузеров загрузка внешних ресурсов требует включенного CORS.

Режим наблюдения

Чтобы включить watch mode, опция env должна быть равна development. После подключения less.js вызовите less.watch():

<script>less = { env: 'development'};</script>
<script src="less.js"></script>
<script>less.watch();</script>

Также watch mode можно временно включить, добавив #!watch в URL страницы.

Изменение переменных

Less позволяет менять переменные во время выполнения. Если вызвать modifyVars с новыми значениями, файл перекомпилируется без перезагрузки страницы.

Простейший пример:

less.modifyVars({
  '@buttonFace': '#5B83AD',
  '@buttonText': '#D9EEF2'
});

Отладка

Less умеет добавлять в CSS служебные данные, которые помогают инструментам найти исходную строку правила.

Можно либо указать опцию dumpLineNumbers, как показано выше, либо добавить !dumpLineNumbers:mediaquery к URL.

Опцию mediaquery можно использовать вместе с FireLESS - формат будет таким же, как у отладки media queries в SCSS. См. также FireLess и Less v2. Значение comment выводит в скомпилированный CSS информацию о файле и номера строк.

Общий пример настроек

Задайте опции в глобальном объекте less до загрузки less.js:

<!-- set options before less.js script -->
<script>
  less = {
    env: "development",
    logLevel: 2,
    async: false,
    fileAsync: false,
    poll: 1000,
    functions: {},
    dumpLineNumbers: "comments",
    relativeUrls: false,
    globalVars: {
      var1: '"quoted value"',
      var2: 'regular value'
    },
    rootpath: ":/a.com/"
  };
</script>
<script src="less.js"></script>

Опции, относящиеся именно к Less.js в браузере

Все остальные параметры см. в разделе Опции Less.js.

async

Тип: Boolean

По умолчанию: false

Определяет, нужно ли запрашивать импортируемые файлы асинхронно. См. также fileAsync.

env

Тип: String

По умолчанию: зависит от URL страницы.

Среда выполнения может быть либо development, либо production.

В production CSS кэшируется в local storage, а информационные сообщения в консоль не выводятся.

Если URL документа начинается с file://, страница открыта локально или использует нестандартный порт, значение автоматически переключается в development.

Например:

less = { env: 'production' };

errorReporting

Тип: String

Возможные значения: html | console | function

По умолчанию: html

Определяет, как сообщать об ошибке, если компиляция завершилась неудачно.

fileAsync

Тип: Boolean

По умолчанию: false

Определяет, нужно ли загружать импорты асинхронно на страницах, открытых по файловому протоколу.

functions (устарело, используйте @plugin)

Тип: object

Пользовательские функции, заданные по имени.

less = {
    functions: {
        myfunc: function() {
            return less.Dimension(1);
        }
    }
};

Дальше их можно использовать как обычные функции Less:

.my-class {
  border-width: unit(myfunc(), px);
}

logLevel

Тип: Number

По умолчанию: 2

Количество сообщений, выводимых в JavaScript-консоль. Обратите внимание: в режиме production логов не будет.

2 - Information and errors
1 - Errors
0 - Nothing

poll

Тип: Integer

По умолчанию: 1000

Интервал опроса в watch mode, в миллисекундах.

relativeUrls

Тип: Boolean

По умолчанию: false

Позволяет при необходимости делать URL относительными. Если значение false, URL уже считаются относительными к входному Less-файлу.

useFileCache

Тип: Boolean

По умолчанию: true (false до v2)

Определяет, использовать ли файловый кэш в пределах сессии. Благодаря этому можно вызывать modifyVars, не перезагружая заново все Less-файлы.

Если используется watcher или вызывается refresh с reload: true, кэш будет очищен перед повторным запуском.


Опции Less.js

Открыть оригинал markdown source для "less-options"

Кроссплатформенные опции

Пути поиска для @import

lessc --include-path=PATH1;PATH2 { paths: ['PATH1', 'PATH2'] }

Если файл из директивы @import не найден по указанному пути, Less продолжит искать его в каталогах, переданных через эту опцию. Это удобно, например, когда вы хотите подключать библиотеку короткими относительными путями, не дублируя длинные директории в каждом Less-файле.

rootpath

lessc -rp=resources/
lessc --rootpath=resources/
{ rootpath: 'resources/' }

Позволяет добавить префикс ко всем сгенерированным импортам и URL в итоговом CSS. На уже обработанные Less-импорты это не влияет - только на те URL и импорты, которые остаются в выходном CSS.

Например, если все изображения лежат в каталоге resources, через эту опцию можно централизованно добавить его ко всем URL.

Перезапись URL

lessc -ru=off
lessc --rewrite-urls=off
{ rewriteUrls: 'off' }
lessc -ru=all
lessc --rewrite-urls=all
{ rewriteUrls: 'all' }
lessc -ru=local
lessc --rewrite-urls=local
{ rewriteUrls: 'local' }

По умолчанию URL сохраняются как есть (off). То есть если вы импортируете файл из подкаталога, а он ссылается на изображение, в CSS попадет ровно тот же URL. Эта опция позволяет переписывать URL в импортированных файлах так, чтобы они всегда были относительны базовому файлу, который вы передали Less.

Например:

/* main.less */
@import "global/fonts.less";
/* global/fonts.less */
@font-face {
  font-family: 'MyFont';
  src: url('myfont/myfont.woff2') format('woff2');
}

Если ничего не задавать или указать rewriteUrls: 'off', компиляция main.less даст:

/* main.less */
/* global/fonts.less */
@font-face {
  font-family: 'MyFont';
  src: url('myfont/myfont.woff2') format('woff2');
}

Если указать rewriteUrls: 'all', результат будет таким:

/* main.less */
/* global/fonts.less */
@font-face {
  font-family: 'MyFont';
  src: url('./global/myfont/myfont.woff2') format('woff2');
}

В режиме rewriteUrls: 'local' переписываются только явно относительные URL, то есть начинающиеся с .:

url('./myfont/myfont.woff2') /* becomes */ url('./global/myfont/myfont.woff2')
url('myfont/myfont.woff2') /* stays */ url('myfont/myfont.woff2')

Это бывает полезно, если вы используете Less вместе с CSS Modules, где логика разрешения путей похожа на Node.js.

В ряде случаев вместо этой опции стоит рассмотреть функцию data-uri, которая встраивает изображение прямо в CSS.

math

Появилась в v3.7.0

lessc -m=[option]
lessc --math=[option]
{ math: '[option]' }

В Less переработали математические режимы, чтобы появился промежуточный вариант между старым strictMath, где почти везде требовались скобки, и прежним поведением по умолчанию, где вычисления выполнялись слишком охотно.

Поскольку в современном CSS символ / часто используется как разделитель значений, появился режим, где скобки обязательны только для деления. Начиная с Less 4 это и есть поведение по умолчанию. Режим "строгой математики" тоже скорректировали, чтобы он вел себя понятнее, хотя старый вариант для совместимости какое-то время сохранялся.

Доступны четыре значения math:

  • always - поведение по умолчанию в Less 3.x; Less вычисляет выражения максимально активно.
  • parens-division - поведение по умолчанию в Less 4; деление через / выполняется только внутри скобок. Вне скобок можно было форсировать вычисление через ./, но этот синтаксис устарел.
  • parens или strict - скобки обязательны для любых математических выражений.
  • strict-legacy - старое поведение strictMath; в Less 4 удалено.

always

Пример:

.math {
  a: 1 + 1;
  b: 2px / 2;
  c: 2px ./ 2;
  d: (2px / 2);
}

Результат:

.math {
  a: 2;
  b: 1px;
  c: 1px;
  d: 1px;
}

parens-division

Пример:

.math {
  a: 1 + 1;
  b: 2px / 2;
  c: 2px ./ 2;
  d: (2px / 2);
}

Результат:

.math {
  a: 2;
  b: 2px / 2;
  c: 1px;
  d: 1px;
}

strict

.math {
  a: 1 + 1;
  b: 2px / 2;
  c: (2px / 2) + (3px / 1);
}

Результат:

.math {
  a: 1 + 1;
  b: 2px / 2;
  c: 1px + 3px;
}

strict-legacy

В старом режиме strictMath смешанные выражения вне скобок приводили к тому, что содержимое скобок вообще не вычислялось. Обычно это не то поведение, которого ожидают.

.math {
  a: 1 + 1;
  b: 2px / 2;
  c: (2px / 2) + (3px / 1);
}

Результат:

.math {
  a: 1 + 1;
  b: 2px / 2;
  c: (2px / 2) + (3px / 1);
}

strictMath (устарело)

Эта настройка заменена опцией math.

Относительные URL (устарело)

lessc -ru
lessc --relative-urls
{ relativeUrls: true }

Заменено на rewriteUrls: "all".

Строгие единицы измерения

lessc -su=on
lessc --strict-units=on
{ strictUnits: true }

По умолчанию эта опция выключена.

Без нее Less пытается угадать, какая единица должна получиться в результате вычисления. Например:

.class {
  property: 1px * 2px;
}

Очевидно, здесь что-то не так: длина, умноженная на длину, дает площадь, а CSS не умеет работать с площадями как с типом значения. Поэтому по умолчанию Less предполагает, что одно из значений пользователь имел в виду просто как число, и выводит 2px.

Если включить строгие единицы, Less сочтет это ошибкой вычисления и завершится с ошибкой.

Совместимость с IE8 (устарело)

lessc --ie-compat { ieCompat: true }

Начиная с v3.0.0 по умолчанию false. Сейчас эта опция используется только функцией data-uri, чтобы не генерировать слишком большие изображения для старых браузеров.

Встроенный JavaScript (устарело)

lessc --js { javascriptEnabled: true }

Начиная с v3.0.0 по умолчанию false. Эта настройка разрешала выполнять встроенный JavaScript внутри .less-файлов. Для части разработчиков это создавало проблему безопасности: они не ожидали, что пользовательские стили могут содержать исполняемый код.

Заменено на @plugin.

Глобальные переменные

lessc --global-var="color1=red" { globalVars: { color1: 'red' } }

Эта опция определяет переменную, доступную внутри файла. По сути, объявление подставляется в начало базового Less-файла. Значит, переменную можно использовать, но если она определена и в самом файле, локальное значение сможет ее переопределить.

Изменяемые переменные

lessc --modify-var="color1=red" { modifyVars: { color1: 'red' } }

В отличие от globalVars, это объявление подставляется в конец базового файла и потому переопределяет все, что уже было объявлено в Less-коде.

Аргументы URL

lessc --url-args="cache726357" { urlArgs: 'cache726357' }

Позволяет дописать аргумент ко всем URL. Обычно используется для cache busting.

Номера строк (устарело)

lessc --line-numbers=comments
lessc --line-numbers=mediaquery
lessc --line-numbers=all
{ dumpLineNumbers: 'comments' }

Генерирует встроенную привязку к исходнику. До появления полноценной поддержки sourcemaps в браузерах это был основной способ отладки.

Предзагруженный плагин

См. раздел Предзагруженные плагины.

lint

lessc --lint -l { lint: true }

Запускает парсер Less и просто сообщает об ошибках, не создавая выходной файл.

compress (устарело)

lessc --compress -x { compress: true }

Включает встроенное сжатие Less. Оно работает приемлемо, но все же уступает специализированным CSS-минификаторам. Обычно лучше сначала скомпилировать Less в CSS, а затем прогнать результат через отдельный инструмент для очистки и сжатия.

Разрешить импорты с небезопасных HTTPS-хостов

lessc --insecure { insecure: true }

Опции source map

Большинство этих настроек не имеют смысла при использовании Less.js прямо в браузере: sourcemap обычно создается на этапе предварительной компиляции Less-файлов.

Создать source map

lessc --source-map { sourceMap: {} }

Включает генерацию source map.

Имя выходного файла source map

lessc --source-map=file.map { sourceMap: { outputFilename: 'file.map' } }

sourceMapRootpath

lessc --source-map-rootpath=dev-files/ { sourceMap: { sourceMapRootpath: 'dev-files/' } }

Задает корневой путь, который будет добавлен ко всем путям Less-файлов внутри source map, а также к пути до самого map-файла, указанному в выходном CSS.

Поскольку basepath по умолчанию равен каталогу входного Less-файла, rootpath по умолчанию рассчитывается как путь от итогового source map-файла до базового каталога входного файла.

Эта опция полезна, например, если CSS генерируется в корне веб-сервера, а исходные Less-, CSS- и map-файлы лежат в другой директории. Тогда структура может выглядеть так:

output.css
dev-files/output.map
dev-files/main.less

sourceMapBasepath

lessc --source-map-basepath=less-files/ { sourceMap: { sourceMapBasepath: 'less-files/' } }

Это настройка, обратная rootpath: она указывает путь, который нужно удалить из выходных путей. Например, если вы компилируете файл внутри каталога less-files, но на веб-сервере исходники должны быть доступны из корня или текущего каталога, этой опцией можно убрать лишний фрагмент less-files из пути.

По умолчанию используется путь к входному Less-файлу.

Включить исходный Less-код в source map

lessc --source-map-include-source { sourceMap: { outputSourceFiles: true } }

При включении этой опции все Less-файлы встраиваются в source map. То есть для доступа к исходникам вам будет достаточно самого map-файла.

Эту настройку можно сочетать с inline-картой, чтобы вообще не держать дополнительных внешних файлов.

Встроенная source map

lessc --source-map-inline { sourceMap: { sourceMapFileInline: true } }

Указывает, что map-файл должен быть встроен прямо в выходной CSS. Для production это обычно не рекомендуется, но в разработке удобно: компилятор создает один файл, который в поддерживающих браузерах использует уже собранный CSS, но при этом позволяет видеть исходный Less-код.

URL source map

lessc --source-map-url=../my-map.json { sourceMap: { sourceMapURL: '../my-map.json' } }

Позволяет переопределить URL в CSS, указывающий на map-файл. Это полезно в случаях, когда комбинации rootpath и basepath недостаточно, чтобы получить нужный путь.


Предзагруженные плагины

Открыть оригинал markdown source для "plugins"

Загрузка плагинов перед началом анализа в Less.js

Хотя самый простой способ использовать плагин — это использовать @plugin at-правило, в среде Node.js вы можете предварительно загрузить глобальный плагин Less.js через командную строку или указав его в параметрах Less.

Предварительная обработка

Предварительная загрузка плагинов необходима, если вы хотите добавить препроцессор Less.js. То есть плагин, который вызывается и передает необработанный исходный код Less еще до начала синтаксического анализа. Примером этого может быть Sass-To-Less плагин препроцессора.

Примечание: предварительная загрузка не требуется для плагинов pre-evaluation (после анализа источника Less, но до его оценки).

Node.js

Использование командной строки

Если вы используете lessc, первое, что вам нужно сделать, это установить этот плагин. В таких реестрах, как NPM, мы рекомендуем регистрировать плагин Less.js с префиксом «less-plugin-» (для упрощения поиска), хотя это не обязательно. Итак, для пользовательского плагина вы можете установить его с помощью:

npm install less-plugin-myplugin

Чтобы использовать плагин, вы можете передать это в командной строке, просто написав:

lessc --myplugin

Less.js попытается загрузить модули «less-plugin-myplugin» и «myplugin» в качестве плагинов всякий раз, когда есть неизвестная опция Less (например, «myplugin»).

Вы также можете явно указать плагин с помощью:

lessc --plugin=myplugin

Чтобы передать параметры плагину, вы можете написать это одним из двух способов.

lessc --myplugin="advanced"
lessc --plugin=myplugin=advanced

Загрузка плагина через Less.js

В Node запросите плагин и передайте его less в массиве в качестве дополнительных плагинов. Например.

var LessPlugin = require('less-plugin-myplugin');
less.render(myCSS, { plugins: [LessPlugin] })
  .then(
    function(output) { },
    function(error) { }
  );

Программное использование

Открыть оригинал markdown source для "programmatic-usage"

Основной точкой входа в less является функция less.render. Это принимает следующий формат

less.render(lessInput, options)
    .then(function(output) {
        // output.css = string of css
        // output.map = string of sourcemap
        // output.imports = array of string filenames of the imports referenced
    },
    function(error) {
    });

// or...

less.render(css, options, function(error, output) {})

Аргумент options является необязательным. Если вы укажете обратный вызов, обещание не будет возвращено, а если вы не укажете обратный вызов, будет дано обещание. Под капотом используется версия обратного вызова, чтобы можно было использовать less синхронно.

Если вы хотите визуализировать файл, вы сначала должны прочитать его в строку (чтобы перейти к less.render), а затем установить в поле «имя файла» в параметрах имя файла основного файла. less будет обрабатывать всю обработку импорта.

Опция sourceMap — это объект, который позволяет вам устанавливать дополнительные параметры исходной карты. Доступные дополнительные параметры: sourceMapURL, sourceMapBasepath, sourceMapRootpath, outputSourceFiles и sourceMapFileInline. Обратите внимание, что опция sourceMap сейчас недоступна для less.js в компиляторе браузера.

less.render(lessInput)
    .then(function(output) {
        // output.css = string of css
        // output.map = undefined
}
//,
less.render(lessInput, {sourceMap: {}})
    .then(function(output) {
        // output.css = string of css
        // output.map = string of sourcemap
}
//or,
less.render(lessInput, {sourceMap: {sourceMapFileInline: true}})
    .then(function(output) {
        // output.css = string of css \n /*# sourceMappingURL=data:application/json;base64,eyJ2ZXJ..= */
        // output.map = undefined
}

Получение доступа к журналу

Вы можете добавить прослушиватель журнала с помощью следующего кода

less.logger.addListener({
    debug: function(msg) {
    },
    info: function(msg) {
    },
    warn: function(msg) {
    },
    error: function(msg) {
    }
});

Примечание: все функции являются необязательными. Ошибка не будет зарегистрирована, а вместо этого будет передана обратно в обратный вызов или обещание в less.render.


Разработка Less.js

Открыть оригинал markdown source для "developing-less"

Спасибо, что хотите поучаствовать в развитии проекта. Перед началом внимательно прочитайте инструкции для контрибьюторов - это сэкономит время и вам, и сопровождающим.

Установите нужные инструменты

Для локальной разработки Less.js понадобятся Node.js и pnpm.

1. Установите Node.js

Скачайте и установите последнюю LTS-версию с nodejs.org.

Проверьте, что Node.js доступен в PATH:

node -v
# Example: v20.10.0

2. Установите pnpm

Less.js использует pnpm для управления зависимостями.

Если pnpm еще не установлен, добавьте его глобально:

npm install -g pnpm

Проверьте установку:

pnpm -v
# Example: 9.6.0

Примечание: для работы pnpm нужен Node.js. Вместе с Node вы также получаете npm, но сам Less.js использует именно pnpm ради эффективности workspace-структуры и предсказуемых установок.

3. Клонируйте репозиторий и установите зависимости

git clone https://github.com/less/less.js.git
cd less.js
pnpm install

Первый pnpm install может идти дольше обычного: pnpm в этот момент собирает свое глобальное content-addressable-хранилище.

4. Проверьте окружение

Если выполнить:

node -v
pnpm -v

вы должны увидеть номера версий обеих программ. Если видите command not found, проверьте PATH или переустановите инструменты.

Совет: если вы наткнулись на ошибку вида Command not found: grunt, запускайте задачи так:

pnpm run grunt -- <task>

или установите CLI глобально:

pnpm add -g grunt-cli

Использование

Grunt в проекте отвечает за сборку, тесты, бенчмарки и вспомогательные задачи. Общий способ запуска:

pnpm run grunt -- <task>

Если grunt-cli установлен глобально, можно использовать и обычный grunt <task>.

Часто используется сокращение:

pnpm test

Это алиас для pnpm run grunt -- test.

Полезные задачи

  • pnpm run grunt -- test
    Полный набор тестов: lint, сборки для Node и браузера, shell-опции, плагины, локальный сервер и браузерные тесты.
  • pnpm run grunt -- dist
    Сборка дистрибутива (shell:build).
  • pnpm run grunt -- browsertest
    Сборка браузерного бандла, запуск локального сервера и browser test runner.
  • pnpm run grunt -- browsertest-server
    Сборка бандла, генерация тестовых страниц и запуск keepalive-сервера, чтобы можно было открыть runner вручную.
    Страницы тестов: http://localhost:8081/tmp/browser/
  • pnpm run grunt -- benchmark
    Запуск бенчмарков производительности.
  • pnpm run grunt -- shell-options
    Проверка матрицы shell-опций, включая устаревшие.
  • pnpm run grunt -- shell-plugin
    Shell-тесты, связанные с плагинами.
  • pnpm run grunt -- quicktest
    Быстрая сборка CommonJS и запуск Node-тестов.

Локальная отладка браузерных тестов

  1. Соберите браузерный бандл и сгенерируйте страницы тестов:

    pnpm run grunt -- browsertest-lessjs
    pnpm run grunt -- shell:generatebrowser
    

    или просто:

    pnpm run grunt -- browsertest-server
    

    Эта команда сама соберет проект, сгенерирует страницы и поднимет keepalive-сервер.

  2. Откройте страницы runner в браузере:

    http://localhost:8081/tmp/browser/
    

Если сервер нужно держать запущенным и интерактивно отлаживать тесты, используйте connect::keepalive через задачу browsertest-server.

Как запускать Less в других окружениях

В каталоге libs находятся less, less-node и less-browser. Папка less содержит чистый JavaScript без привязки к конкретному окружению. Если подключить less/libs/less, вы получите функцию, принимающую объект окружения и массив файловых менеджеров. Эти же файловые менеджеры можно реализовывать и как плагины.

var createLess = require("less/libs/less"),
    myLess = createLess(environment, [myFileManager]);

API окружения описан в packages/less/src/less/environment/environment-api.ts,
а API файлового менеджера - в packages/less/src/less/environment/file-manager-api.ts.

Для файловых менеджеров настоятельно рекомендуется наследоваться от AbstractFileManager. Это позволяет переопределять только нужное поведение и не ломаться при появлении новых возможностей в Less. Примеры можно посмотреть в двух Node-реализациях, браузерной реализации и реализации npm import plugin.