- установите NodeJS
- установите глобально Gulp:
npm install --global gulp-cli
- скачайте сборку с помощью Git:
git clone https://github.com/inkShio/inkShio-start-project.git
- перейдите в скачанную папку со сборкой:
cd inkShio-start-project
- скачайте необходимые зависимости:
npm i
npm run dev
— запускает сборку для разработкиnpm run prod
— запускает сборку для продакшенаnpm run html
— собрать html файлыnpm run html:prod
— собрать html файлы в режиме продакшенаnpm run css
— собрать css файлnpm run css:prod
— собрать css файл в режиме продакшенаnpm run js
— собрать js файлnpm run js:prod
— собрать js файл в режиме продакшенаnpm run images:template
— собрать изображение шаблонаnpm run images:content
— собрать изображения контентаnpm run icon
— собрать спрайт иконокnpm run favicon
— сгенерировать фавикон
Для удобства работы с данными в pug импользуем json.
Допустим есть news.json
[
{
"title": "Заголовок 1",
"date": "01.01.2022",
"url": "news-full.html"
},
{
"title": "Заголовок 2",
"date": "02.02.2022",
"url": "news-full.html"
}
]
и employees.json
[
{
"name": "Иванов Иван Иванович",
"email": "[email protected]",
"avatar": "content/employees/avatar.jpg",
"url": "person.html"
},
{
"name": "Петров Петр Петрович",
"email": "[email protected]",
"avatar": "content/employees/avatar.jpg",
"url": "person.html"
}
]
В pug выводим следующим образом
each item in news
.news
.news__title= item.title
.news__date= item.date
a.news__link(href= item.url) Подробнее
each item in employees
.employee
img.employee__avatar(src= item.avatar, alt= item.name)
.employee__name= item.name
.employee__email= item.email
a.employee__link(href= item.url) Профиль
Наблюдение: Как-то столкнулся с ошибкой был файл office.json
и выводилось это each item in office
, вроде все ок, но выдовало ошибку, как оказалось переменная не должна начинаться ни с одного из ключевых слов, в данном случае of
. Обсуждение есть тут.
Используется emitty для поиска зависимостей между файлами и создания инструментов для инкрементной компиляции. Это когда проект собирается полностью лишь один раз, а затем происходит сборка лишь тех файлов, что были изменены с момента последней сборки проекта. Используйте include и extends.
Что происходит при сборке:
- Форматирование HTML-кода, придания ему удобочитаемого и красивого вида с соответствующими отступами. (
prod
) - Сортировка атрибутов (
prod
) - Добавление версии (
?=v
) дляstyle.min.css
иscripts.min.js
(prod
)
Для сброса стилей используется inkReset.
Подключена bootstrap сетка.
Для медиазапросов используется библиотека sass-mediaqueries.
Что происходит при сборке:
- Создание карт источников (
dev
) - Добавление вендорных префиксов (
prod
) - Группировка media-запросов (
prod
) - Минимизация файла (
prod
)
Для использования webp изображений в background используй следующий пример:
.image {
background-image: url('../images/pattern.png');
.webp & {
background-image: url('../images/pattern.webp');
}
}
Подключена библиотека jquery.
Что происходит при сборке:
- Создание карт источников (
dev
) - Минимизация файла (
prod
)
Что происходит при сборке:
- Сжатие изображений (
prod
) - Конвертация в webp (
dev
,prod
)
Собирается спрайт из svg файлов. Если в папке svg
есть вложеные папки, то название иконки приобретет вид название папки-название файла
.
К примеру в папке svg
лежит папка elements
, в этой папке лежит файл arrow.svg
, в итоге для вывода иконки нужно написать elements-arrow
.
Копируем шрифт с разрешением .otf
или .ttf
в папку src/static/fonts/
, файлы сконвертируются в .woff
и .woff2
(Допустим Roboto-Thin.otf или Roboto-Thin.ttf).
Название шрифта должно иметь понятный суффик. (Roboto -Thin.otf, Roboto -Light.otf и т.д.).
Список допустимых суфиксов:
thin
— 100;extralight
— 200;light
— 300;regular
— 400;medium
— 500;semibold
— 600;bold
— 700;extrabold
,heavy
— 800;black
— 900;
Подключение шрифта произойдет автоматически. Файл который будет импортироваться в scss находится тут tmp/fonts-generated.scss
.
Пример использование в scss
h1 {
font-family: 'Roboto';
font-weight: 100;
}
h2 {
font-family: 'Roboto';
font-weight: 300;
}
Фавикон генерируется с помощью сервиса realfavicongenerator. Выведен в отдельный таск, т.к. генерация может быть долгой. Сгенерируй фавиконку с помощью сервиса, зайти на вкладку gulp
скопировать функцию realFavicon.generateFavicon
и заменить ее в файле tasks/favicons.js
. В функции указать masterPicture: config.paths.favicons.app
и dest: config.paths.favicons.build
.
inkShio-start-project
├── .vscode # конфигурация для vs code
│ ├── extensions.json # расширения
│ └── settings.json # настройки
├── gulp
│ ├── tasks # задачи gulp
│ └── config.js # конфигурация gulp
├── src # рабочая папка
│ ├── blocks
│ | ├── components # компоненты
│ | └── modules # модули
│ ├── js
│ | ├── helpers # вспомогательные скрипты
│ | ├── libs # библиотеки
│ | ├── scripts # скрипты
│ | └── main.js # главный скрипт
│ ├── json # json данные
│ ├── pug
│ | ├── helpers # вспомогательные элементы
│ | ├── layouts # макеты
│ | └── pages # страницы
│ ├── scss
│ | ├── base # основные стили
│ | ├── helpers # вспомогательные стили
│ | ├── libs # стили библиотек
│ | ├── utilities # утилиты
│ | └── style.scss # файл где собираем все стили
│ └── static
│ | ├── content # изображения контента (новости, статьи и т. д.)
│ | ├── favicons # favicons
│ | ├── fonts # шрифты
│ | ├── images # изображения макета
│ | └── svg # векторные иконки
├── build # папка с результатом
├── tmp # папка для временных файлов
├── .editorconfig # настройки для IDE
├── .eslintrc # настройки eslint
├── .gitignore # запрет на отслеживание файлов git'ом
├── .ncurc.json # запрет на обновление пакетов
├── .pug-lintrc # настройки puglint
├── .stylelintrc # настройки stylelint
├── gulpfile.js # настройки gulp
├── package.json # список зависимостей
└── README.md # документация сборки