Памятка по Eleventy
Eleventy (11ty) – генератор статических сайтов (SSG). Он полезен для создания многостраничных сайтов со множеством однообразных страниц и блоков. Вместе с Элевенти можно использовать обычные NPM-пакеты, превращая его в мощный инструмент сборки.
Установка Eleventy
Пошаговая установка с нуля и начало работы. Нужно иметь браузер, редактор кода и терминал (командную строку), например браузер Chrome и редактор VS Code со встроенным терминалом.
Установка Node и NPM
Скачать и установить Node.js, версию LTS. Вместе с Node.js устанавливаются пакеты NPM. Проверить установлены ли Node/NPM и их версию:
node --version
илиnpm --version
Создание папки и файла package.json
Создать папку для будущего сайта-проекта:
/eleventy.site
Перейти в терминале в нашу папку (сделать её текущей):
cd eleventy.site
. Далее все команды в терминале нужно вводить из этой папки!Создать и настроить файл "package.json" для проекта:
npm init -y
. Приставка "-y" отвечает ДА на все вопросы и сразу создаёт файл по умолчанию.Установка Eleventy
Локальная установка Eleventy в наш проект и в devDependencies файла package.json:
npm install --save-dev @11ty/eleventy
Локальная установка означает, что Eleventy будет работать только для файлов внутри этого каталога. После установки в нашей папке появляется папка "node_modules" со множеством папок-файлов и файл
package-lock.json
(для блокировки версий пакетов).Запуск Eleventy
npx @11ty/eleventy --serve --quiet
Выдало ответ: [11ty] Wrote 0 files in 0.02 seconds (v1.0.2). Теперь можно посмотреть наш сайт в браузере по адресу http://localhost:8080/
Настройка конфига
В корне проекта нужно создать файл конфига .eleventy.js, в нём будут все настройки Eleventy. Вот хороший пример для старта:
// Место для подключения плагинов.
module.exports = function (eleventyConfig) {
// Чтобы сайт открывался при запуске 11ty:
eleventyConfig.setBrowserSyncConfig({ open: true, });
// Копирование файлов в выходную папку:
eleventyConfig.addPassthroughCopy('src/**/*.css');
eleventyConfig.addPassthroughCopy('src/img');
eleventyConfig.addPassthroughCopy('src/*.{js,php,txt,xml,json,ico}');
// Настройка путей, папок и движков:
return {
addPassthroughFileCopy: true,
dataTemplateEngine: "njk",
markdownTemplateEngine: "njk",
htmlTemplateEngine: "njk",
templateFormats: ["html", "njk", "md"],
dir: {
input: "src",
output: "site",
includes: "_includes",
layouts: "_includes",
data: "_includes"
}
};
};
В низу файла мы указываем (относительно корня проекта): исходную папку, выходную папку, а также места расположения наших будущих файлов инклюдов, лейаутов и общих данных.
Структура проекта
- eleventy.site
- .eleventy.js
- package.json
- src
- _includes
- img
- index.html
- styles.css
- scripts.js
- site
Основные примеры применения
Создадим страницу статьи для блога eleventy.site/blog/post-1/index.html
.
Внешний шаблон всех страниц eleventy.site/src/_includes/_page-base.njk
:
<!doctype html>
<html lang="ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{{ title }}</title>
<meta name="description" content="{{ description }}">
</head>
<body>
{% include "_header.njk" %}
<main class="main">
{{ content | safe }}
</main>
{% include "_footer.njk" %}
</body>
</html>
Необязательный средний (промежуточный/расширяющий) шаблон страницы eleventy.site/src/_includes/_page-post.njk
:
---
layout: _page-base.njk
---
<section class="container blog-article">
<h1>{{ title }}</h1>
{{ content | safe }}
</section>
Файл (шаблон) страницы поста eleventy.site/src/blog/post-1/index.html
:
---
title: 'Тайтл статьи №1'
description: 'Дескрипшн "статьи" №1'
layout: _page-post.njk
---
<h1>Заголовок статьи №1</h1>
<p>Какой-то длинный текст статьи №1.</p>
Файл страницы поста eleventy.site/src/blog/post-2/index.html
:
---
title: 'Тайтл статьи №2'
description: 'Дескрипшн "статьи" №2'
layout: _page-post.njk
---
# Заголовок статьи №2
Какой-то длинный текст статьи №2.
Дата создания: Автор: Олег Миторун