# Процесс разработки
Для того, чтобы ознакомиться с процессом разработки, разберем следующую задачу:
- Создание нового App проекта, которая будет состоять из одной html страницы.
- Создание общего CSS файла для нашего приложения.
- Создание главной страницы index.html
- Генерация SVG иконок как спрайт (не шрифт).
- Упаковка в релиз и передача заказчику сверстанный веб шаблон.
Опустим процесс установки ungic, и перейдем к созданию проекта.
# Создание проекта
Для начала, перейдем к нашему рабочему каталогу, назовем его mydir:
> cd /d D://mydir
Создаем проект с именем App
с помощью команды ungic create App
:
D://mydir> ungic create App
Log output to console disabled. You can enable this option using the "log true" command.
√ project name ... App
√ version ... 1.0.0
√ author ... unbywyd
------- System -------
| Project successfully initialized. To run the project, go to the created App directory and use the "ungic run" command!
----------------------
Мы видим, что проект был успешно создан и сгенерирован в D://mydir/App
директорию, переходим в проект и запускаем его с помощью команды ungic run
:
d:\mydir> cd App
d:\mydir\App> ungic run
Log output to console disabled. You can enable this option using the "log true" command.
------- System -------
| App app running at: http://127.0.0.1:2020
----------------------
ungic:
Проект был запущен, а также в браузере автоматически открылась стартовая страница по адресу http://127.0.0.1:2020
. По данному адресу, можно получить доступ ко всему, что находится в App/dist
директории нашего проекта.
TIP
В среде разработки, dist директория является public директорией проекта, но не являются конечной директорией для публикации, для этого следует сгенерировать релиз!
# Создание CSS
Начнем с создания css файла, для того, чтобы включить его в наш будущий html документ с помощью CLI меню.
Для данного примера, мы используем только один компонент, который будет генерировать наши конечные CSS стили документа. Для создания компонента, требуется перейти в scss меню с помощью команды scss
:
ungic scss: ?
------- System: CLI -------
| Unknown argument: ?
---------------------------
ungic scss: index.js [command]
Commands:
index.js exit Exit from application
index.js back Back to main menu
index.js create <cid> Create new component
index.js release <release_name> Assemble components in a release
[build_name]
index.js components Show list of existing components
index.js unwatch Skip file changes for this plugin
index.js watch Continue to watch file changes for
this plugin
index.js remove <cid> Remove component
ungic scss:
Как видим, нам нужна команда create <cid>, используем её для создания нашего компонента:
ungic scss: create app
------- System: CLI -------
| app component successfully created!
---------------------------
Наш компонент, успешно создан и находится по пути D:\mydir\App\source\scss\components\app
.
TIP
В режиме разработки, каждый SASS компонент генерирует собственный конечный .css файл!
На данный момент, мы закончим с данным разделом и перейдем к следующему этапу.
# Создание документа
Для того, чтобы создать новый документ, можно перейти в рабочую директорию HTML плагина source/html
и создать обычный HTML документ посредством редактора, а можно воспользоваться командой create через CLI меню HTML плагина. Мы выберем второй вариант:
ungic scss: back # вернемся назад
ungic: html # перейдем в меню html плагина
ungic html: create index # создадим страницу
? Language ISO Code. Will set lang attribute to the html tag ru
? RTL false
? Title My first page
? Description
? Include sass components app # из списка выберем наш sass app компонент
------- System: CLI -------
| Done!
---------------------------
После ввода create <name>
команды, будет предложено указать некоторые параметры страницы включая возможность выбрать SASS компоненты, которые будут задействованы при разработке данной страницы.
Перейдем к нашей странице source/html/index.html
и посмотрим её содержимое:
<!DOCTYPE html>
<html lang="ru" dir="ltr">
<head>
<meta charset="UTF-8">
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<un-pipe css="app"></un-pipe>
<title>My first page</title>
</head>
<body>
</body>
</html>
Как мы видим, это почти обычный HTML документ за исключением тега <un-pipe css="app"></un-pipe>
, который связывает наш sass компонент с данным документом и включает сгенерированный .css файл в режиме разработки.
Если мы посмотрим в конечную dist
директорию нашего проекта, то мы увидим в ней наш сгенерированный index.html файл, со следующим содержимым:
<!DOCTYPE html>
<html lang="ru" dir="ltr">
<head>
<meta charset="UTF-8">
<meta name="description" content>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" data-component="app" href="http://127.0.0.1:2020/css/app.css?v=1604310073685">
<title>My first page</title>
<link rel="stylesheet" href="http://127.0.0.1:2020/ungic/css/devtools.css">
</head>
<body>
<script src="http://127.0.0.1:2020/ungic/js/dist/pipe.min.js" data-connect="http://127.0.0.1:2020" data-src="index.html"></script>
</body>
</html>
Как видим, данный документ имеет уже валидный HTML и включает сгенерированный app.css файл стилей. Кроме того, в подвале документа мы видим pipe.min.js скрипт, отвечающий за live reloading функционал, который используется исключительно в режиме разработки.
Для того, чтобы открыть данный документ в браузере, необходимо перейти по нашему адресу http://127.0.0.1:2020
локального сервера, или воспользоваться командой open из CLI меню:
ungic html: back
ungic: open # или open /, open index.html
После того, как документ открыт в браузере проверим включение наших стилей. Перейдем к render.scss файлу нашего sass компонента D:\mydir\App\source\scss\components\app\render.scss
и напишем что нибудь для проверки:
@use ".core" as this;
@use "ungic.theme"as theme;
@use "functions"as *;
@use "mixins"as *;
@use "ungic.meta"as un-meta;
@use "ungic.utils"as un-utils;
@use "sass:meta"as meta;
@use "sass:map"as map;
@include this.component {
// Добавим текст
&:after {
content: 'Test!';
}
// и инвертируем цвета, чтобы было заметно
color: theme.color(background-color);
background-color: theme.color(text-color);
}
Однако, после сохранения файла, изменений в браузере мы не увидим, так как, mixin this.component
создает обертку относительно имени scss компонента .app
, для этого, поправим наш исходный source/html/index.html
html файл и добавим .app
элемент на страницу:
<!DOCTYPE html>
<html lang="ru" dir="ltr">
<head>
<meta charset="UTF-8">
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<un-pipe css="app"></un-pipe>
<title>My first page</title>
</head>
<body>
<!-- Добавим контейнер app -->
<div class="app"></div>
</body>
</html>
В ту же секунду, в браузере появится результат нашей работы!
# Добавление иконок
Берем подготовленные SVG файлы и помещаем их в рабочую директорию source/icons
icons плагина. Вот, что получилось у меня:
.
├── source
│ ├── icons
| | ├── magic.svg
│ │ └── idea.svg
После добавления SVG файлов в dist директории появится новый документ demo-icons.html который генерируется автоматически icons плагином и содержит демо иконок проекта, откроем данный документ в браузере:
ungic: open demo-icons
Перед нами появится страница с двумя иконками.
TIP
Icons плагин автоматически генерирует demo-icons.html html страницу со всеми иконками проекта, по клику на иконке в буфер обмена сохраняется её ID.
# Использование иконок
Более подробное руководство по использованию иконок в ungic, смотрите в следующем разделе.
Для использования иконок в HTML странице, существует специальный handlebars icon helper:
<!DOCTYPE html>
<html lang="ru" dir="ltr">
<head>
<meta charset="UTF-8">
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<un-pipe css="app"></un-pipe>
<title>My first page</title>
</head>
<body>
<!-- Используем icon инструмент и передаем ID нашей иконки -->
<div class="app">{{{icon "magic"}}}</div>
</body>
</html>
Если открыть сгенерированную index.html страницу и посмотреть на её содержимое, то можно увидеть что наша иконка по умолчанию была сгенерирована в <i/>
тег как шрифт, а наша задача, получить SVG спрайт
<!DOCTYPE html>
<html lang="ru" dir="ltr">
<head>
<meta charset="UTF-8">
<meta name="description" content>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" data-component="app" href="http://127.0.0.1:2020/css/app.css?v=1604314551388">
<title>My first page</title>
<link rel="stylesheet" href="http://127.0.0.1:2020/ungic/css/devtools.css">
<!-- Сгенерированный временный шрифт -->
<link rel="stylesheet" href="http://127.0.0.1:2020/ungic/font-icons">
</head>
<body>
<div class="app">
<!-- Наша иконка -->
<i aria-hidden="true" class="icon icon-magic"></i>
<span class="icon-label">magic</span>
</div>
<script src="http://127.0.0.1:2020/ungic/js/dist/pipe.min.js" data-connect="http://127.0.0.1:2020" data-src="index.html"></script>
</body>
</html>
для этого, нужно изменить режим генерации иконок, а точнее svgIconsMode параметр в конфигурационном ungic.config.json файле в build.plugins.icons.dev разделе или воспользоваться временным решением, которое будет работать до перезагрузки проекта, а точнее командой svgmode из меню icons плагина:
ungic icons: svgmode svgSprite
------- System -------
| SVG icons generation mode switched to svgSprite!
----------------------
Проверяем исходных код нашей index.html страницы:
<!DOCTYPE html>
<html lang="ru" dir="ltr">
<head>
<meta charset="UTF-8">
<meta name="description" content>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" data-component="app" href="http://127.0.0.1:2020/css/app.css?v=1604318866688">
<title>My first page</title>
<link rel="stylesheet" href="http://127.0.0.1:2020/ungic/css/devtools.css">
<!-- Ссылка на шрифт пропала -->
</head>
<body>
<div class="app">
<!-- Иконка шрифта заменилась на SVG -->
<svg class="ungic-icon" role="img" aria-labelledby="un_8i6w7ueqn" width="2em" height="2em">
<title id="un_8i6w7ueqn">magic</title>
<use href="#svg-icon-magic" />
</svg>
</div>
<script src="http://127.0.0.1:2020/ungic/js/dist/pipe.min.js" data-connect="http://127.0.0.1:2020" data-src="index.html"></script>
<!-- а также, добавился svg sprite к документу -->
<svg class="ungic-svg-sprite" style="display:none">
<symbol xmlns="http://www.w3.org/2000/svg" viewBox="0 0 511.997 511.997" fill="currentcolor" id="svg-icon-idea">
<path d="M57.318 166.155H12.746C5.905 166.155.36 171.7.36 178.541s5.545 12.386 12.386 12.386h44.571c6.842 0 12.387-5.545 12.387-12.386s-5.545-12.386-12.386-12.386z" />
<path d="M499.251 166.155h-44.572c-6.84 0-12.386 5.545-12.386 12.386s5.546 12.386 12.386 12.386h44.572c6.84 0 12.386-5.545 12.386-12.386s-5.546-12.386-12.386-12.386z" />
<path d="M108.347 326.191c-4.837-4.837-12.679-4.837-17.517 0l-32.42 32.42c-4.837 4.837-4.837 12.679 0 17.517 2.419 2.419 5.589 3.628 8.758 3.628s6.34-1.209 8.758-3.628l32.421-32.42c4.837-4.836 4.837-12.679 0-17.517z" />
<path d="M430.912 3.628c-4.838-4.837-12.678-4.837-17.517 0L381.863 35.16c-4.837 4.837-4.837 12.68 0 17.516a12.359 12.359 0 0 0 8.759 3.627c3.171 0 6.339-1.21 8.758-3.628l31.531-31.531c4.837-4.837 4.837-12.68.001-17.516z" />
<path d="M130.117 35.142L98.602 3.628c-4.837-4.835-12.68-4.835-17.517 0-4.837 4.837-4.837 12.68 0 17.517L112.6 52.66c2.419 2.418 5.589 3.628 8.758 3.628s6.34-1.21 8.758-3.628c4.837-4.837 4.837-12.68.001-17.518z" />
<path d="M453.585 358.615l-32.3-32.303c-4.838-4.837-12.678-4.837-17.517.001-4.837 4.837-4.837 12.68 0 17.516l32.301 32.301a12.347 12.347 0 0 0 8.758 3.628c3.171 0 6.339-1.21 8.758-3.628 4.837-4.836 4.837-12.679 0-17.515z" />
<path d="M255.999 33.636c-85.648 0-155.327 72.885-155.327 162.474 0 41.65 14.919 86.482 40.933 123 19.979 28.045 30.538 59.249 30.538 90.24v77.875c0 13.659 11.113 24.772 24.772 24.772h118.169c13.659 0 24.772-11.113 24.772-24.772V409.35c0-30.99 10.559-62.195 30.536-90.24 26.014-36.517 40.934-81.35 40.934-123-.002-89.589-69.681-162.474-155.327-162.474zm59.083 453.591H196.913v-16.201h59.085c6.841 0 12.387-5.545 12.387-12.386s-5.546-12.386-12.387-12.386h-59.085v-16.2h118.172l.014 57.171c-.001.002-.006.002-.017.002zm-76.453-231.086l-16.564-35.387h67.866l-16.562 35.387a12.414 12.414 0 0 0-1.142 4.43l-9.605 144.711h-13.247l-9.605-144.711a12.413 12.413 0 0 0-1.141-4.43zm111.586 48.597c-22.123 31.056-34.208 65.733-35.082 100.544h-27.684l9.341-140.749 23.831-50.915a12.385 12.385 0 0 0-11.218-17.637H202.592a12.385 12.385 0 0 0-11.218 17.636l23.832 50.915 9.341 140.749h-27.686c-.874-34.812-12.958-69.488-35.082-100.544-22.754-31.942-36.338-72.551-36.338-108.628 0-75.93 58.567-137.702 130.555-137.702s130.555 61.772 130.555 137.702c.002 36.079-13.582 76.688-36.336 108.629z" />
</symbol>
<symbol xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" fill="currentcolor" id="svg-icon-magic">
<path d="M494.1 165.9l-36-48.2 19.3-57c3.8-11.2-2.2-23.3-13.4-27.1-4.4-1.5-9.3-1.5-13.7 0l-57 19.3-48.2-36c-9.4-7-22.8-5.1-29.9 4.3-2.8 3.8-4.3 8.3-4.2 13l.8 60.2-49.1 34.8c-9.6 6.8-11.9 20.1-5.1 29.7 2.7 3.8 6.6 6.7 11.1 8.1l35.2 10.9L6.3 475.6l30.2 30.2 297.1-297.1 10.5 33.8c2.4 7.8 9 13.5 17 14.7 1.1.2 2.2.3 3.3.3 6.9 0 13.4-3.4 17.4-9l34.8-49.1 60.2.8h.3c11.8 0 21.3-9.6 21.3-21.3 0-4.8-1.5-9.3-4.3-13z" />
<path d="M433.3 342.6c-20.9-.2-37.8-17.3-37.7-38.2 0-2.9-2.4-5.3-5.3-5.3s-5.3 2.4-5.3 5.3c.1 20.9-16.7 38-37.7 38.2-2.9 0-5.3 2.4-5.3 5.3s2.4 5.3 5.3 5.3c20.9.2 37.8 17.3 37.7 38.2 0 2.9 2.4 5.3 5.3 5.3s5.3-2.4 5.3-5.3c-.1-20.9 16.7-38 37.7-38.2 2.9 0 5.3-2.4 5.3-5.3s-2.4-5.3-5.3-5.3z" />
<path d="M171.2 54.6c20.9.2 37.8 17.3 37.7 38.2 0 2.9 2.4 5.3 5.3 5.3s5.3-2.4 5.3-5.3c-.1-20.9 16.7-38 37.7-38.2 2.9 0 5.3-2.4 5.3-5.3s-2.4-5.3-5.3-5.3c-20.9-.2-37.8-17.3-37.7-38.2 0-2.9-2.4-5.3-5.3-5.3s-5.3 2.4-5.3 5.3c.1 20.9-16.7 38-37.7 38.2-2.9 0-5.3 2.4-5.3 5.3s2.4 5.3 5.3 5.3z" />
<path d="M37.9 233.3c20.9.2 37.8 17.3 37.7 38.2 0 2.9 2.4 5.3 5.3 5.3s5.3-2.4 5.3-5.3c-.1-20.9 16.7-38 37.7-38.2 2.9 0 5.3-2.4 5.3-5.3s-2.4-5.3-5.3-5.3c-20.9-.2-37.8-17.3-37.7-38.2 0-2.9-2.4-5.3-5.3-5.3s-5.3 2.4-5.3 5.3c.1 20.9-16.7 38-37.7 38.2-2.9 0-5.3 2.4-5.3 5.3s2.4 5.3 5.3 5.3z" />
</symbol>
</svg>
</body>
</html>
# Создание релиза
Переходим в главное меню и используем команду release
ungic: release app
? Do you want to configure release? No # Релиз можно сконфигурировать на данном этапе
------- System: scss -------
| app release successfully generated to D:\mydir\App\dist\releases\app-v1.0.0
----------------------------
------- System: icons -------
| svgSprite release successfully generated to D:\mydir\App\dist\releases\app-v1.0.0
-----------------------------
------- System: CLI -------
| app release successfully generated to D:\mydir\App\dist\releases\app-v1.0.0
---------------------------
Релиз был успешно сгенерирован, смотрим полученный сгенерированный dist\releases\app-v1.0.0\index.html документ
<!DOCTYPE html>
<html lang="ru" dir="ltr">
<head>
<meta charset="UTF-8">
<meta name="description" content>
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>My first page</title>
<link rel="stylesheet" href="css/v1604389504-app.css">
<link rel="stylesheet" href="css/v1604389504-fonts-ungic.css">
</head>
<body>
<div class="app"><i aria-hidden="true" class=" icon icon-magic"></i><span class="icon-label">magic</span></div>
</body>
</html>
как видим выше, сгенерированный релиз не соответствует нашим требованиям, иконки сгенерировались как шрифты, а не как SVG спрайт. Это связанно с тем, что релиз имеет собственную конфигурацию, которую предварительно нужно настроить в конфигурационном файле проекта, или настроить релиз непосредственно с помощью CLI меню. Подробнее о создании релиза.
В нашем случае, мы создадим конкретную конфигурацию для нашего app релиза, который будет состоять только их тех компонентов, которые нам необходимы
конфигурация целиком
{
"mode": "development",
"server": {
"port": 2020
},
"version": "1.0.0",
"build": {
"releases": {
"default": {
"saveAllAssets": true,
"host": "https://unbywyd.com",
"noConflict": true,
"urlsOptimization": true,
"scssBuildName": "default",
"htmlBuildName": "default",
"iconsBuildName": "default",
"includeOnlyUsedComponents": false,
"combineIcons": true,
"combineScssComponents": true
},
// Добавим конфигурацию для общего релиза
"app": {
// Укажем имена релиза для каждого плагина
"scssBuildName": "app",
"htmlBuildName": "app",
"iconsBuildName": "app",
// Сгенерировать только то, что используем
"includeOnlyUsedComponents": 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"
},
// Конфигурация релиза для HTML плагина
"app": {
"pages": [
"index.html"
]
}
}
}
},
"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
}
},
"build": {
"default": {
"configId": "default",
"themes": [],
"defaultTheme": "default",
"components": "*",
"excludeComponents": []
},
// Конфигурация релиза для SCSS плагина
"app": {
"inverse": false // Можно вынести в отдельный конфиг
}
}
}
},
"icons": {
"dev": {
"svgIconsMode": "fonts",
"sprites": true,
"svgIcons": true
},
"release": {
"configs": {
"default": {
"svgIconsMode": "fonts"
},
// Добавим доп. конфиг для смены режима генерации иконок
"svgSprite": {
"svgIconsMode": "svgSprite"
}
},
"build": {
"default": {
"configId": "default",
"svgIcons": true,
"sprites": "**/*.png"
},
// Конфигурация релиза для ICONS плагина
// выберем конфиг с требуемым режимом генерации иконок
"app": {
"configId": "svgSprite"
}
}
}
}
}
},
"author": "unbywyd",
"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": {
"rtlPrefix": {
"prefixType": "attribute",
"prefix": ""
},
"advancedExport": false,
"cleancss": true
},
"html": {
"beautify": {},
"minifier": {},
"cheerio": {
"decodeEntities": false
},
"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
}
}
},
"verbose": false,
"name": "App",
"browserslist": {
"development": [
"defaults",
"not IE 11",
"not IE_Mob 11",
"maintained node versions"
]
}
}
Повторяем нашу release app
команду и смотрим полученный результат:
ungic: release app
? Do you want to configure release? No
------- System: scss -------
| app release successfully generated to D:\mydir\App\dist\releases\app-v1.0.0
----------------------------
------- System: icons -------
| svgSprite release successfully generated to D:\mydir\App\dist\releases\app-v1.0.0
-----------------------------
------- System: CLI -------
| app release successfully generated to D:\mydir\App\dist\releases\app-v1.0.0
---------------------------
<!DOCTYPE html>
<html lang="ru" dir="ltr">
<head>
<meta charset="UTF-8">
<meta name="description" content>
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>My first page</title>
<!-- Выбранный нами хост -->
<link rel="stylesheet" href="https://unbywyd.com/css/v1604391951-app.css">
</head>
<body>
<div class="app">
<!-- SVG Sprite иконка -->
<svg class="ungic-icon" role="img" aria-labelledby="un_1o6ho76pf" width="2em" height="2em">
<title id="un_1o6ho76pf">magic</title>
<use href="#svg-icon-magic" />
</svg>
</div>
<!-- SVG Sprite только с одной иконкой которую мы использовали в данном документе -->
<svg class="ungic-svg-sprite" style="display:none">
<symbol xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" fill="currentcolor" id="svg-icon-magic">
<path d="M494.1 165.9l-36-48.2 19.3-57c3.8-11.2-2.2-23.3-13.4-27.1-4.4-1.5-9.3-1.5-13.7 0l-57 19.3-48.2-36c-9.4-7-22.8-5.1-29.9 4.3-2.8 3.8-4.3 8.3-4.2 13l.8 60.2-49.1 34.8c-9.6 6.8-11.9 20.1-5.1 29.7 2.7 3.8 6.6 6.7 11.1 8.1l35.2 10.9L6.3 475.6l30.2 30.2 297.1-297.1 10.5 33.8c2.4 7.8 9 13.5 17 14.7 1.1.2 2.2.3 3.3.3 6.9 0 13.4-3.4 17.4-9l34.8-49.1 60.2.8h.3c11.8 0 21.3-9.6 21.3-21.3 0-4.8-1.5-9.3-4.3-13z" />
<path d="M433.3 342.6c-20.9-.2-37.8-17.3-37.7-38.2 0-2.9-2.4-5.3-5.3-5.3s-5.3 2.4-5.3 5.3c.1 20.9-16.7 38-37.7 38.2-2.9 0-5.3 2.4-5.3 5.3s2.4 5.3 5.3 5.3c20.9.2 37.8 17.3 37.7 38.2 0 2.9 2.4 5.3 5.3 5.3s5.3-2.4 5.3-5.3c-.1-20.9 16.7-38 37.7-38.2 2.9 0 5.3-2.4 5.3-5.3s-2.4-5.3-5.3-5.3z" />
<path d="M171.2 54.6c20.9.2 37.8 17.3 37.7 38.2 0 2.9 2.4 5.3 5.3 5.3s5.3-2.4 5.3-5.3c-.1-20.9 16.7-38 37.7-38.2 2.9 0 5.3-2.4 5.3-5.3s-2.4-5.3-5.3-5.3c-20.9-.2-37.8-17.3-37.7-38.2 0-2.9-2.4-5.3-5.3-5.3s-5.3 2.4-5.3 5.3c.1 20.9-16.7 38-37.7 38.2-2.9 0-5.3 2.4-5.3 5.3s2.4 5.3 5.3 5.3z" />
<path d="M37.9 233.3c20.9.2 37.8 17.3 37.7 38.2 0 2.9 2.4 5.3 5.3 5.3s5.3-2.4 5.3-5.3c-.1-20.9 16.7-38 37.7-38.2 2.9 0 5.3-2.4 5.3-5.3s-2.4-5.3-5.3-5.3c-20.9-.2-37.8-17.3-37.7-38.2 0-2.9-2.4-5.3-5.3-5.3s-5.3 2.4-5.3 5.3c.1 20.9-16.7 38-37.7 38.2-2.9 0-5.3 2.4-5.3 5.3s2.4 5.3 5.3 5.3z" />
</symbol>
</svg>
</body>
</html>
Вот и все, передаем нашему клиенту .zip архив релиза, который находится в директории нашего релиза D:\mydir\App\dist\releases\app-v1.0.0\app-v1.0.0.zip