Конфигурация и CLI

Поля config.json, платформы CSS, LESS и SCSS, флаги командной строки и состав результата.

Командная строка

npx mixin-dictionary
npx mixin-dictionary -c ./config-mixin-dictionary.json
npx mixin-dictionary -c ./config-mixin-dictionary.json --watch
ФлагКороткоНазначение
--config <path>-cПуть к JSON-конфигу. По умолчанию ./config.json.
--watch-wПересобирать стили при изменении файлов токенов (source, themes) и конфига.
--version-vПоказать версию пакета.

Ошибки конфига и токенов выводятся одной строкой с именем файла и путём токена, без стектрейса. Код выхода — 1.

Поля конфига

{
  "$schema": "./node_modules/mixin-dictionary/schema/config.schema.json",
  "platforms": ["css", "less", "scss"],
  "source": ["tokens/*.json"],
  "output": "./styles",
  "mediaAliases": ["screen", "breakpoint"],
  "keyframesAliases": ["keyframes"],
  "themes": {
    "light": ["tokens/themes/light.json"],
    "dark": ["tokens/themes/dark.json"]
  }
}
ПолеТипПо умолчаниюНазначение
$schemastring—Путь к JSON Schema из пакета: автодополнение и проверка конфига в редакторе.
platformsstring[]["css", "less", "scss"]Какие файлы собирать.
sourcestring[]["tokens/**/*.json"]Glob-шаблоны или пути к файлам токенов: tokens/*.json или tokens/base.json. Поддерживаются JSON, JSON5 и JS.
outputstring./stylesКаталог результата. Создаётся, если его нет.
mediaAliasesstring[]["screen", "breakpoint"]Категории токенов брейкпоинтов: из них собираются миксины медиазапросов.
keyframesAliasesstring[]["keyframes"]Категории токенов анимаций: из них собираются keyframes.
numberUnit"px", "rem" или false"px"Единица для голых чисел ("$type": "number") в размерных категориях: 4 → 4px. "rem" делит на 16, false оставляет число как есть. См. Из Figma.
dimensionAliasesstring[]["spacing", "radius", "size", …]Категории (первый сегмент пути), числа в которых — размеры. Категории из mediaAliases входят всегда.
themesобъект—Файлы токенов тем и тема по умолчанию. См. Темы.

Если используете themes, не включайте файлы тем в source. Пишите tokens/*.json, а не tokens/**/*.json, иначе одноимённые токены столкнутся.

Что попадает в файлы

ФайлПеременныеТекстовые стилиМедиазапросыKeyframes
css/index.css--color-white в :root———
less/index.less@color-white.h64().lg(@rules).keyframes(show, { … })
scss/index.scss$color-white@mixin h64@mixin lg@include keyframes(show) { … }

Имя переменной — путь токена через дефис: font.h64.font-size → $font-h64-font-size. Пути в camelCase тоже переводятся в kebab-case: screen.tabletUp.min → $screen-tablet-up-min, и миксины ссылаются на те же имена переменных. Имя самого миксина — это имя группы как есть: @mixin tabletUp.

В CSS миксинов нет: у CSS нет механизма миксинов, поэтому там только переменные.

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

@import './styles/less/index.less';

.title {
  .h64();
}

.lg({
  .sidebar { display: none; }
});
@import './styles/scss/index.scss';

.title {
  @include h64;
}

@include lg {
  .sidebar {
    display: none;
  }
}

Пример целиком

Реальный конфиг библиотеки pbstyles: config-mixin-dictionary.json.