# Конфигурация / ungic.config.json

В данном разделе вы можете получить информацию об ungic.config.json конфигурационном файле проекта.

Данный файл создается при инициализации или при создании нового ungic проекта.

TIP

Некоторые основные параметры данного конфиг. файла схожи с параметрами из package.json, поэтому рекомендуем устанавливать ungic после инициализации npm: npm init ungic init, тем самым, конфигурационный файл будет создан на основе package.json файла.

# Пример конфигурационного файла:

{
  "name": "appName",
  "version": "1.0.0",
  "mode": "development",
  "author": "unbywyd",
  "server": {
    "port": 2020
  },
  "openInBrowser": true,
  "fs": {
    "dirs": {
      "source": "source",
      "dist": "dist",
      "temp": "temp"
    },
    "dist": {
      "css": "css",
      "fonts": "fonts",
      "img": "img",
      "js": "js"
    },
    "source": {
      "scss": "scss",
      "html": "html",
      "icons": "icons",
      "assets": "assets"
    }
  },
  "plugins": {
    "scss": {
      "dirAttribute": "dir",
      "htmlIsRootElement": true,
      "cleancss": true
    },
    "html": {
      "beautify": {},
      "minifier": {},
      "cheerio": {
        "decodeEntities": false
      },
      "customTypeHandlers": {
          "mustache": {
              "transformer": "./mustache/transformer",
              "includeHandler": "./mustache/handler",
              "dev": false
          }                 
      },
      "dirAttribute": "dir",
      "replaceAmpToSymbol": true,
      "cleancss": {},
      "relativeSrc": false,
      "deleteFromDist": false
    },
    "icons": {
      "startCodepoint": 61696,
      "sprites": {
        "className": "sprite",
        "maxWidth": 70,
        "maxHeight": false
      },
      "svgSprite": {
        "width": "2em",
        "height": "2em",
        "external": false,
        "removeColors": true,
        "className": "svg-icon"
      },
      "fonts": {
        "name": "ungic",
        "fixedWidth": false,
        "fontHeight": 512,
        "centerHorizontally": true,
        "normalize": true,
        "fontWeight": 400,
        "className": "icon",
        "fontSize": "2em",
        "lables": true
      }
    }
  },
  "build": {
    "releases": {
      "default": {
        "saveAllAssets": true,
        "host": "",
        "noConflict": true,
        "urlsOptimization": true,
        "scssBuildName": "default",
        "htmlBuildName": "default",
        "iconsBuildName": "default",
        "includeOnlyUsedComponents": false,
        "combineIcons": true,
        "combineScssComponents": true
      }
    },
    "plugins": {
      "html": {
        "dev": {
          "formatting": "beautify",
          "validation": false
        },
        "release": {
          "configs": {
            "default": {
              "formatting": "beautify",
              "validation": false,
              "includeLocalStyles": false,
              "mergeInternalStyles": false,
              "optimizeInternalStyles": false,
              "includeLocalScripts": false,
              "internalScriptsToFooter": false,
              "externalScriptsToFooter": false,
              "mergeInternalScripts": false,
              "optimizeInternalScripts": false
            }
          },
          "build": {
            "default": {
              "pages": "*",
              "excludePages": [],
              "configId": "default"
            }
          }
        }
      },
      "scss": {
        "dev": {
          "inverse": true,
          "autoprefixer": true,
          "defaultInverse": false,
          "direction": "ltr",
          "oppositeDirection": true,
          "theme": "default"
        },
        "release": {
          "configs": {
            "default": {
              "themeMode": "external",
              "inverseMode": "combined",
              "inverse": true,
              "defaultInverse": false,
              "autoprefixer": true,
              "direction": "ltr",
              "oppositeDirection": true,
              "versionInFilename": true
            }
          },
          "build": {
            "default": {
              "configId": "default",
              "themes": [],
              "defaultTheme": "default",
              "components": "*",
              "excludeComponents": []
            }
          }
        }
      },
      "icons": {
        "dev": {
          "svgIconsMode": "fonts",
          "sprites": true,
          "svgIcons": true
        },
        "release": {
          "configs": {
            "default": {
              "svgIconsMode": "fonts"
            }
          },
          "build": {
            "default": {
              "configId": "default",
              "svgIcons": true,
              "sprites": "**/*.png"
            }
          }
        }
      }
    }
  },
  "verbose": false
}

# name

  • Type: String

  • Default: значение поля "name" из package.json файла

# version

  • Type: String

  • Default: значение поля "version" из package.json файла

# mode

  • Type: String

  • Default: development | production

  • Usage:

    Режим разработки.

    Не смотря на то, что имеется данная опция, вся разработка в ungic ведется исключительно в development режиме. Переключать данный режим стоит только в том случае, если в конфигурационном файле проекта или в package.json файле имеется конфигурация для таких плагинов как:

    Конфигурацию указывать относительно режима:

    ...
    browserslist: {
      development: [
        "defaults",
        "not IE 11",
        "not IE_Mob 11",
        "maintained node versions"
      ]
    }
    

# author

  • Type: String

  • Default: Значение поля author из package.json

# server

  • Type: Object

  • Keys:

    • port Number Default: 2020

# openInBrowser

  • Type: Boolean

  • Default: true

  • Usage:

    Открывать в браузере стартовую страницу после запуска ungic проекта

# fs (File system)

  • Type: Object

  • Usage:

    Структура файлов ungic проекта. Значение каждого ключа является относительным путем к директориям от конфигурационного файла.

    "fs": {
        "dirs": {
            "source": "source",
            "dist": "dist",
            "temp": "temp"
        },
        "dist": {
            "css": "css",
            "fonts": "fonts",
            "img": "img",
            "js": "js"
        },
        "source": {
            "scss": "scss",
            "html": "html",
            "icons": "icons",
            "assets": "assets"
        }
    }
    

    Обратите внимание!

    Все рабочие директории ungic проекта должна находиться в одной директории с конфигурационным файлом или быть вложенными в другие директории, но не могут располагаться уровнем выше! Смотрите пример ниже:

    // Позволительно
    "fs": {
        "dirs": {
            "source": "ungic/source",
            "dist": "ungic/public",
            "temp": "temp"
        }
        ...
    
    // Непозволительно
        "dirs": {
            "source": "../ungic/source",
            "dist": "../ungic/public",
            "temp": "temp"
        }
        ...
    }
    

# plugins / Базовая конфигурация плагинов

  • Type: Object

  • Usage:

    Базовая конфигурация плагинов

    "plugins": {
      "scss": {
        ...
      },
      "html": {
        ...
      },
      "icons": {
        ...
      }
    }
    

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

    Обратите внимание!

    Ниже приведены "исходные" конфигурационные схемы со значениями по умолчанию.

# plugins.scss

  • Type: Object

  • Usage:

    Исходная конфигурационная схема
    dirAttribute: {
        type: 'string',
        default: 'dir'
    },
    htmlIsRootElement: {
        type: 'boolean',
        default: true
    },
    generateThemeColorsVars: {
        type: 'boolean',
        default: false
    },
    themeColorsVarsMode: {
        type: 'boolean',
        default: false
    },
    cleancss: {
        "anyOf": [
            {
                type: 'object'
            },
            {
                type: 'boolean'
            }
        ],
        default: true
    }
    

    Пояснение:

    ...
    "scss": {
      // Переключить методы ungic.theme модуля в режим генерации переменных вместо цвета
      "themeColorsVarsMode": false,
      // Генерировать переменные для всех цветов тем (без оттенков)
      "generateThemeColorsVars": false,
      // DIR аттрибут для rtl-postcss плагина (атрибут который отвечает за направление текста)
      "dirAttribute": "dir",
      // Сделать основным элементом HTML тег (по умолчанию), а иначе, требуется использовать произвольный атрибут data-ungic-root 
      "htmlIsRootElement": true,
      // Включить обработку clean-css плагином, можно передать параметры в виде объекта
      "cleancss": true
    }
    

# plugins.html

  • Type: Object

  • Usage:

    Исходная конфигурационная схема
    beautify: {
        type: 'object',
        default: {}
    },
    minifier: {
        type: 'object',
        default: {}
    },
    cheerio: {
        type: 'object',
        default: {
            decodeEntities: false
        }
    },
    customTypeHandlers: {
        type: 'object',
        patternProperties: {
          "^[A-z_]+\w*$": {
            type: "object",
            required: ["transformer"],
            properties: {
                transformer: {
                    type: "string"
                },
                dev: {
                    type: "boolean",
                    default: false
                },
                includeHandler: {
                    "anyOf": [{
                        type: 'string'
                      },
                      {
                        type: 'boolean'
                      }
                    ]
                }
            }
          }
        }
    },
    dirAttribute: {
        type: 'string',
        default: 'dir'
    },
    replaceAmpToSymbol: {
        type: 'boolean',
        default: true
    },
    cleancss: {
        type: 'object',
        default: {}
    },
    relativeSrc: {
        type: 'boolean',
        default: false
    },
    deleteFromDist: {
        type: 'boolean',
        default: false
    }
    

    Пояснение:

    ...
    "html": {
      // Опции для js-beautify плагина, можно использовать
      // в корне конфигурационного файла относительно режима разработки,
      // для подробностей смотрите mode опцию.
      "beautify": {},
    
      // DIR атрибут, должен быть таким же, как и у SCSS плагина.
      "dirAttribute": "dir",
    
      // Опции для html-minifier плагина, можно использовать
      // в корне конфигурационного файла относительно режима разработки,
      // для подробностей смотрите mode опцию.
      "minifier": {},
      
      // Добавление пользовательского обработчика файлов
      "customTypeHandlers": {
          "mustache": {
              // Трансформер применяется каждый раз когда содержимое файла
              // изменилось. Должен вернуть асинхронную функцию
              // которая в свою очередь должна вернуть обработанное
              // значение содержимого файла. Подробнее в документации HTML плагина.    
              "transformer": "./mustache/transformer",
    
              // Синхронная функция, которая используется 
              // для обработки содержимого файла во время
              // его включения.
              "includeHandler": "./mustache/handler",
    
              // Ражем разработки для includeHandler
              "dev": false
          }                 
      },
    
      // Настройки для cheerio плагина
      "cheerio": {
        "decodeEntities": false
      },
    
      // Заменять & на знак &
      "replaceAmpToSymbol": true,
    
      // Опции для clean-css плагина, можно использовать
      // в корне конфигурационного файла относительно режима разработки,
      // для подробностей смотрите mode опцию.
    
      // HTML плагин использует postcss обработку
      // внутренних стилей документа при генерации релиза (На усмотрение).
      "cleancss": {},
    
      // Тестовая опция. По умолчанию, при разработке, все пути
      // до стилей и ресурсов ведут на локальный сервер,
      // данная опция позволяет использовать относительный путь вместо ссылок.
      "relativeSrc": false,
    
      // При удалении документа из source директории
      // удалять файл и из dist директории.
      // Не рекомендуется использовать данную опцию, во избежании потери данных!
      "deleteFromDist": false
    }
    ...
    

# plugins.icons

  • Type: Object

  • Usage:

    Исходная конфигурационная схема
    {
      startCodepoint: {
        type: 'number',
        default: 61696
      },
      sprites: {
        type: 'object',
        properties: {
          className: {
            type: 'string'
          },
          maxWidth: {
            type: 'number'
          },
          maxHeight: {
            "oneOf": [
              { type: "boolean",  enum:[false]},
              { type: "number" }
            ]
          }
        },
        default: {
          className: 'sprite',
          maxWidth: 70,
          maxHeight: false
        }
      },
      svgSprite: {
        type: 'object',
        properties: {
          className: {
            type: 'string'
          },
          removeColors: {
            type: 'boolean'
          },
          external: {
            type: 'boolean'
          },
          width: {
            "oneOf": [
              { type: "string" },
              { type: "number" }
            ]
          },
          height: {
            "oneOf": [
              { type: "string" },
              { type: "number" }
            ]
          }
        },
        default: {
          width: '2em',
          height: '2em',
          external: false,
          removeColors: true,
          className: 'svg-icon'
        }
      },
      fonts: {
        type: 'object',
        properties: {
          lables: {
              type: 'boolean'
          },
          className: {
            type: 'string'
          },
          name: {
            type: 'string'
          },
          fixedWidth: {
            type: 'boolean'
          },
          fontHeight: {
            type: 'number'
          },
          fontWeight: {
            type: 'number'
          },
          centerHorizontally: {
            type: 'boolean'
          },
          normalize: {
            type: 'boolean'
          },
          fontSize: {
            "oneOf": [
                { type: "string" },
                { type: "number" }
            ]
          }
        },
        default: {
          name: 'ungic',
          fixedWidth: false,
          fontHeight: 512,
          centerHorizontally: true,
          normalize: true,
          fontWeight: 400,
          className: 'icon',
          fontSize: '2em',
          lables: true
        }
      }
    }
    

    Пояснение:

    ...
    {
      "icons": {
        "startCodepoint": 61696,
    
        // Конфигурация для спрайтов (PNG, JPEG..)
        "sprites": {
          "className": "sprite",
          "maxWidth": 70,
          "maxHeight": false
        },
    
        // Конфигурация для SVG спрайтов
        "svgSprite": {
          "width": "2em",
          "height": "2em",
          "external": false,
          "removeColors": true,
          "className": "svg-icon"
        },
    
        // Конфигурация для иконок - шрифтов.
        "fonts": {
          // Название шрифта иконок
          "name": "ungic",
          "fixedWidth": false,
          "fontHeight": 512,
          "centerHorizontally": true,
          "normalize": true,
          "fontWeight": 400,
    
          // Имя класса иконок
          "className": "icon",
    
          // Базовый размер иконок
          "fontSize": "2em",
    
          // Для поддержки доступности иконок,
          // рекомендуется генерировать для них заголовки
          // которые видны программам чтения с экрана.
          "lables": true
        }
      }
    }
    ...
    

# build / Конфиг. сборки проекта

  • Type: Object

  • Usage:

    Настройки плагинов по сборке проекта и релиза.

# build.releases / Конфиг. релиза

  • Type: Object

  • Usage:

    Данный объект содержит конфигурационные схемы, которые применяются при генерации общего релиза. Ключ объекта - это build_name параметр который указывается в команде при создании релиза, а значение - объект с параметрами релиза.

    "releases": {
      "{build_name}": {...params}
    }
    

# build.releases[build_name]

  • Usage:

    Для генерации релиза требуется передать build_name параметр, данный параметр является ключом releases объекта, а его значение - объект с параметрами релиза.

    Пример default конфигурации по умолчанию:

    ...
    "releases": {
      // default = build_name
      "default": {
        // Перенести все файлы из assets директории в dist, иначе будут перенесены только те, что явно используются.
        "saveAllAssets": true,
    
        // Можно задать имя хоста или относительный путь.
        // Все ссылки в файлах будут обработаны относительного данного пути.
        "host": "",
    
        // Генерировать динамические имена файлов путем добавления версии сборки к именам файлов.
        "noConflict": true,
    
        // Оптимизация путей.
        "urlsOptimization": true,
    
        // Требуется указать build_name для sass конфигурации релиза
        "scssBuildName": "default",
    
        // Требуется указать build_name для html конфигурации релиза
        "htmlBuildName": "default",
    
        // Требуется указать build_name для icons конфигурации релиза
        "iconsBuildName": "default",
    
        // Данная опция позволяет включать в релиз только то,
        // что были использовано в проекте.
    
        // Стоит обратить внимание, данная опция может быть включена только тогда
        // когда процесс включения всех ресурсов (стили, иконки, изображения)
        // используется непосредственно с помощью инструментов ungic.
        // Смотрите пример ниже.
        "includeOnlyUsedComponents": false,
    
        // Индивидуальный релиз иконок и стилей для каждой выбранной страницы релиза
        "combineIcons": true,
        "combineScssComponents": true
      }
    }
    ...
    

    Пример использования includeOnlyUsedComponents параметра:

    Если сгенерировать релиз с нижеприведенной для примера HTML страницей, то в релизе, будет присутствовать только одна home иконка, а features иконка будет отсутствовать, так как, данная иконка была использована без icon handlebars хелпера, который не только рендерит иконку, но и регистрирует входную точку и привязывает данную иконку к текущей странице.

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>Document</title>
    </head>
    <body>
      <a href="#">{{{icon "home"}}} Home page</a>
      <a href="#"><i class="icon icon-features"></i> Home page</a>
    </body>
    </html>
    

    Пример использования при билде релиза посредством CLI

    ungic: release --help
    
    ------- System: CLI -------
    | Not enough non-option arguments: got 0, need at least 1
    ---------------------------
    ungic: index.js release <release_name> [version] [build_name]
    
    ungic: release myRelease 1.0 default
    

# build.plugins / Конфиг. плагинов по сборке проекта

  • Type: Object

  • Usage:

    В данной секции задаются конфигурации для каждого из плагина которые влияют на сборку проекта.

    ...
    {
      "build": {
        "plugins": {
          "html": {
            ...
          },
          "scss": {
            ...
          },
          "icons": {
            ...
          }
        }
      }
    }
    ...
    

    Конфигурационный объект состоит из двух ключей dev и release:

    "icons": {
      "dev": {
        ...
      },
      "release": {
        ...
      }
    }
    

    В dev объекте указываются конфигурационные параметры которые будут применены в среде разработки.

    Обратите внимание!

    Данная конфигурация не зависит от mode режима сборки (development|production). Вся разработка в ungic ведется исключительно в dev режиме и это не влияет на env переменную процесса.

    В release объекте указываются конфигурационные параметры которые будут применены при создании релиза. Данный объект, также состоит из двух ключей configs и build:

    "icons": {
      ...
      "release": {
        "configs": {
        ...
        },
        "build": {
          ...
        }
      }
    }
    

    В build объекте регистрируются конфигурационные схемы релизов, ключ объекта является значением build_name параметра

    ungic: icons
    ungic icons: release --help
    ungic icons: index.js release <release_name> [build_name]
    

    В configs указываются параметры конфигурации релиза, а сам релиз ссылается на данный конфиг

    Пример:

    "icons": {
      ...
      "release": {
        "configs": {
          "main": {
            ...
          }
        },
        "build": {
          "configId": "main",
          ...
        }
      }
    }
    

# build.plugins.html

  • Type: Object

  • Usage:

    Конфигурация которая используется html плагином для сборки проекта.

    Исходная конфигурационная схема
    dev: {
      type: "object",
      properties: {
        formatting: {
          "anyOf": [{
              type: 'string',
              enum: ['minifier', 'beautify']
            },
            {
              type: 'boolean',
              enum: [false]
            }
          ]
        },
        validation: {
          type: 'boolean'
        }
      },
      default: {
        formatting: 'beautify',
        validation: false
      }
    },
    release: {
      properties: {
        configs: {
          type: 'object',
          patternProperties: {
            "^[A-z_]+\w*$": {
              type: "object",
              properties: {
                formatting: {
                  "anyOf": [{
                      type: 'string',
                      enum: ['minifier', 'beautify']
                    },
                    {
                      type: 'boolean',
                      enum: [false]
                    }
                  ]
                },
                validation: {
                  type: 'boolean'
                },
                includeLocalStyles: {
                  type: 'boolean'
                },
                mergeInternalStyles: {
                  type: 'boolean'
                },
                optimizeInternalStyles: {
                  type: 'boolean'
                },
                includeLocalScripts: {
                  type: 'boolean'
                },
                internalScriptsToFooter: {
                  type: 'boolean'
                },
                externalScriptsToFooter: {
                  type: 'boolean'
                },
                mergeInternalScripts: {
                  type: 'boolean'
                },
                optimizeInternalScripts: {
                  type: 'boolean'
                }
              }
            }
          }
        },
        build: {
          type: "object",
          patternProperties: {
            "^[A-z_]+\w*$": {
              type: "object",
              required: ['configId', 'pages'],
              properties: {
                version: {
                  type: 'string'
                },
                configId: {
                  type: "string",
                  default: "default"
                },
                pages: {
                  "anyOf": [{
                      type: "array",
                    },
                    {
                      type: "string",
                      enum: ["*"]
                    }
                  ]
                },
                excludePages: {
                  type: 'array'
                }
              }
            }
          },
          additionalProperties: false
        }
      },
      default: {
        configs: {
          default: {
            formatting: 'beautify',
            validation: false,
            includeLocalStyles: false,
            mergeInternalStyles: false,
            optimizeInternalStyles: false,
            includeLocalScripts: false,
            internalScriptsToFooter: false,
            externalScriptsToFooter: false,
            mergeInternalScripts: false,
            optimizeInternalScripts: false
          }
        },
        build: {
          default: {
            pages: "*",
            excludePages: [],
            configId: "default"
          }
        }
      }
    }
    

    Пояснение:

    // Конфиг в режиме разработки
    "dev": {
      // Тип форматирования
      "formatting": "beautify",
    
      // Проверять на валидность HTML и генерировать отчёт
      "validation": false
    },
    // Конфигурации для релиза.
    "release": {
      "configs": {
        // Конфигурация с именем "default"
        "default": {
          // Тип форматирования
          // - beautify с сохранением пробелов/табов
          // - minifier сжатое
          "formatting": "beautify",
    
          // Проверять на валидность HTML и генерировать отчёт
          "validation": false,
    
          // Включить внешние css стили во внутренние? (Действует только на локальные файлы)
          "includeLocalStyles": false,
    
          // Объединить внутренние стили?
          "mergeInternalStyles": false,
    
          // Оптимизировать внутренние стили?
          "optimizeInternalStyles": false,
    
          // Включить внешние js скрипты во внутренние? (Действует только на локальные файлы)
          "includeLocalScripts": false,
    
          // Переместить внутренние скрипты в подвал?
          "internalScriptsToFooter": false,
    
          // Переместить внешние скрипты в подвал?
          "externalScriptsToFooter": false,
    
          // Объединить внутренние скрипты?
          "mergeInternalScripts": false,
    
          // Оптимизировать внутренние скрипты?
          "optimizeInternalScripts": false
        }
      },
      "build": {
        "default": {
    
          // Какие страницы генерировать, поддерживается звездочка для выбора всех страниц.
          "pages": "*",
    
            // Если в pages указана звездочка, тут можно указать исключения
          "excludePages": [],
    
          // Тут указываем имя конфигурации
          "configId": "default"
        }
      }
    }
    

    Обратите внимание!

    Из конфигурации выше, при выборе html страниц для релиза, используется ключ pages, значение которого может быть звездочкой * или массивом с относительными путями от исходной рабочей папки HTML плагина, по умолчанию: source/html/

# build.plugins.scss

  • Type: Object

  • Usage:

    Конфигурация которая применяется для сборки проекта scss плагином.

    Исходная конфигурационная схема
    dev: {
      type: "object",
      required: ['theme'],
      properties: {
        theme: {
          type: "string"
        },
        autoprefixer: {
          type: "boolean",
          default: true
        },
        inverse: {
          type: "boolean"
        },
        defaultInverse: {
          type: "boolean"
        },
        direction: {
          type: "string",
          enum: ["ltr", "rtl"]
        },
        oppositeDirection: {
          type: "boolean"
        }
      },
      default: {
        inverse: true,
        autoprefixer: true,
        defaultInverse: false,
        direction: 'ltr',
        oppositeDirection: true,
        theme: 'default'
      }
    },
    release: {
      properties: {
        configs: {
          type: 'object',
          patternProperties: {
            "^[A-z_]+\w*$": {
              type: "object",
              required: ['autoprefixer', 'inverse', 'defaultInverse',
              'themeMode', 'inverseMode', 'direction', 'oppositeDirection'],
              properties: {
                versionInFilename: {
                  type: 'boolean'
                },
                autoprefixer: {
                  type: "boolean"
                },
                inverse: {
                  type: "boolean"
                },
                defaultInverse: {
                  type: "boolean"
                },
                themeMode: {
                  type: "string",
                  enum: ["combined", "external"]
                },
                inverseMode: {
                  type: "string",
                  enum: ["combined", "external"]
                },
                direction: {
                  "anyOf": [{
                      type: "string",
                      enum: ["ltr", "rtl"]
                    },
                    {
                      type: "boolean",
                      enum: [false]
                    }
                  ]
                },
                oppositeDirection: {
                  type: "boolean"
                }
              }
            }
          },
          additionalProperties: false
        },
        build: {
          type: "object",
          patternProperties: {
            "^[A-z_]+\w*$": {
              type: "object",
              required: ['components', 'configId'],
              properties: {
                configId: {
                  type: "string",
                  default: "default"
                },
                defaultTheme: {
                  type: "string"
                },
                themes: {
                  "anyOf": [{
                      type: "array",
                    },
                    {
                      type: "boolean",
                      enum: [false]
                    },
                    {
                      type: "string",
                      enum: ["*"]
                    }
                  ]
                },
                version: {
                  type: 'string'
                },
                excludeComponents: {
                  type: 'array'
                },              
                components: {
                  "anyOf": [{
                      type: "array",
                    },
                    {
                      type: "string",
                      enum: ["*"]
                    }
                  ]
                }
              }
            }
          },
          additionalProperties: false
        }
      },
      default: {
        configs: {
          default: {
            versionInFilename: true,
            themeMode: "external",
            inverseMode: "combined",
            inverse: true,
            defaultInverse: false,
            autoprefixer: true,
            direction: 'ltr',
            oppositeDirection: true
          }
        },
        build: {
          default: {
            configId: "default",
            themes: [],
            defaultTheme: "default",
            components: "*",
            excludeComponents: []
          }
        }
      }
    }
    

    Пояснение:

    "scss": {
      // Конфиг в режиме разработки
      "dev": {
        // Генерировать инверсию?
        "inverse": true,
    
        // Обработка плагином autoprefixer
        "autoprefixer": true,
    
        // Инверсия по умолчанию?
        "defaultInverse": false,
    
        // direction по умолчанию (ltr|rtl)
        "direction": "ltr",
    
        // Генерировать противоположное направление? (LTR -> RTL, RTL -> LTR)
        "oppositeDirection": true,
    
        // Тема разработки
        "theme": "default"
      },
    
      // Конфигурация релиза
      "release": {
        "configs": {
          "default": {
            // Версия файла указывается в имени файла, 
            // требуется для избежания кэширования.
            "versionInFilename": true,
    
            // Метод генерации .css файлов тем
            // - external - отдельный файл для каждой темы
            // - combined - комбинированный (в общем файле со всеми стилями)
            "themeMode": "external",
    
            // Метод генерации .css файлов для инверсий тем
            // - external - отдельный файл для каждой темы
            // - combined - комбинированный (в общем файле со всеми стилями)
            "inverseMode": "combined",
    
            // Генерировать инверсию?
            "inverse": true,
    
            // Инверсия по умолчанию?
            "defaultInverse": false,
    
            // Обработка autoprefixer
            "autoprefixer": true,
    
            // Направление по умолчанию (ltr|rtl)
            "direction": "ltr",
    
            // Генерировать противоположное направление? (LTR -> RTL, RTL -> LTR)
            "oppositeDirection": true
          }
        },
        "build": {
          "default": {
            // ID конфига
            "configId": "default",
    
            // Темы которые следует включить в проект
            "themes": [],
    
            // Тема по умолчанию
            "defaultTheme": "default",
    
            // Компоненты которые будут собраны в единый релиз.
            // Звездочка * - все компоненты
            "components": "*",
    
            // Если components - * (звездочка), то тут, указываются исключения
            "excludeComponents": []
          }
        }
      }
    }
    

    TIP

    Обратите внимание! В режиме разработки, конфигурацию для dev параметра можно назначать и изменять в реальном времени для каждого компонента, без необходимости перезагрузки проекта! Подробнее в данном разделе.

# build.plugins.icons

  • Type: Object

  • Usage:

    Конфигурация которая применяется для сборки проекта icons плагином.

    Исходная конфигурационная схема
    dev: {
      type: "object",
      properties: {
        svgIconsMode: {
          type: 'string',
          enum: ["svgSprite", "fonts"]
        },
        svgIcons: {
          type: "boolean"
        },
        sprites: {
          type: "boolean"
        }
      },
      default: {
        svgIconsMode: 'fonts',
        sprites: true,
        svgIcons: true
      }
    },
    release: {
      properties: {
        configs: {
          type: 'object',
          patternProperties: {
            "^[A-z_]+\w*$": {
              type: "object",
              properties: {
                svgIconsMode: {
                  type: 'string',
                  enum: ["svgSprite", "fonts"]
                }
              }
            }
          }
        },
        build: {
          type: "object",
          patternProperties: {
            "^[A-z_]+\w*$": {
              type: "object",
              required: ['configId'],
              properties: {
                version: {
                  type: 'string'
                },
                configId: {
                  type: "string"
                },
                svgIcons: {
                  "anyOf": [{
                      type: "string"
                    },
                    {
                      type: "array"
                    },
                    {
                      type: "boolean"
                    }
                  ]
                },
                sprites: {
                  "anyOf": [{
                      type: "string"
                    },
                    {
                      type: "array"
                    },
                    {
                      type: "boolean"
                    }
                  ]
                }
              }
            }
          },
          additionalProperties: false
        }
      },
      default: {
        configs: {
          default: {
            svgIconsMode: 'fonts'
          }
        },
        build: {
          default: {
            configId: 'default',
            svgIcons: true,
            sprites: '**/*.png'
          }
        }
      }
    }
    

    Пояснение:

    // Конфиг в режиме разработки
    "dev": {
      // Режим генерации SVG иконок
      // - fonts как шрифты
      // - svgSprite как SVG спрайты
      "svgIconsMode": "fonts",
    
      // Генерировать спрайт из растровых иконок?
      "sprites": true,
    
      // Генерировать svg иконки?
      "svgIcons": true
    },
    // Конфиги для релиза
    "release": {
      "configs": {
        "default": {
          // Режим генерации SVG иконок
          "svgIconsMode": "fonts"
        }
      },
      "build": {
        "default": {
          "configId": "default",
          // Генерировать SVG иконки?
            // boolean (true) генерировать все иконки
            // array генерировать конкретные иконки. Требуется указывать ID иконок!
            // string - glob паттерн относительно source директории
          "svgIcons": true,
    
          // Генерировать растровые иконки в спрайт?
            // boolean (true) генерировать все растровые иконки в спрайт
            // array генерировать конкретные растровые иконки. Требуется указывать ID иконок!
            // string - glob паттерн относительно source директории
          "sprites": "**/*.png"
        }
      }
    }
    

    Обратите внимание!

    При использовании массива в виде значения для svgIcons и sprites параметров, следует указывать ID иконок. ID иконки можно посмотреть в CLI меню Icons плагина с помощью команд icons или search, а также при генерации handlebars шаблона:

    {{{include "templates/ungic-icons.hbs" icons=true}}}
    
    // templates/ungic-icons.hbs
    
    {{{debug}}}
    

    TIP

    Режим генерации SVG иконок можно менять на лету с помощью команды svgmode [mode] в CLI icons меню:

    ungic icons: svgmode // Узнать активный режим
    
    ------- System -------
    | Active svgIcons mode: fonts
    ----------------------
    
    ungic icons: svgmode svgSprite // Изменить режим
    
    ------- System -------
    | Icons generation mode switched to svgSprite!
    ----------------------
    

    Благодаря использованию icon handlebars хелпера в html страницах, все документы с иконками будут пересобраны с учетом активного режима.