mitorun studio

Памятка по Eleventy

Eleventy (11ty) – генератор статических сайтов (SSG). Он полезен для создания многостраничных сайтов со множеством однообразных страниц и блоков. Вместе с Элевенти можно использовать обычные NPM-пакеты, превращая его в мощный инструмент сборки.

Установка Eleventy

Пошаговая установка с нуля и начало работы. Нужно иметь браузер, редактор кода и терминал (командную строку), например браузер Chrome и редактор VS Code со встроенным терминалом.

  1. Установка Node и NPM

    Скачать и установить Node.js, версию LTS. Вместе с Node.js устанавливаются пакеты NPM. Проверить установлены ли Node/NPM и их версию: node --version или npm --version

  2. Создание папки и файла package.json

    Создать папку для будущего сайта-проекта: /eleventy.site

    Перейти в терминале в нашу папку (сделать её текущей): cd eleventy.site. Далее все команды в терминале нужно вводить из этой папки!

    Создать и настроить файл "package.json" для проекта: npm init -y. Приставка "-y" отвечает ДА на все вопросы и сразу создаёт файл по умолчанию.

  3. Установка Eleventy

    Локальная установка Eleventy в наш проект и в devDependencies файла package.json: npm install --save-dev @11ty/eleventy

    Локальная установка означает, что Eleventy будет работать только для файлов внутри этого каталога. После установки в нашей папке появляется папка "node_modules" со множеством папок-файлов и файл package-lock.json (для блокировки версий пакетов).

  4. Запуск 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/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.

Дата создания: Автор: Олег Миторун