| August 23, 2022
Материал этой статьи предназначен для тех, кто уже обладает
некоторыми знаниями по созданию сайтов с помощью Hugo.
Если Вы НЕ один из таких, то я Вас научу.
Следите за новостями на сайте! 🤝
Введение
Продолжаю делиться лучшими практиками Hugo. На этот раз мы поговорим о:
- самом простом способе работать с конфигурацией Hugo веб-сайта
- о том, почему самый простой способ - не значит - самый лучший
- и о том, как действительно стоит управлять конфигурацией Hugo веб-сайтов (спойлер: через Config Folder)
Основная часть
Ну а прежде, чем мы начнём разговор о такой мощной фиче Hugo - как Config Folder, нужно разобраться с тем, а как вообще работа с конфигурацией выглядит в Hugo.
Стандартный подход
Для примера, возьмём следующий файл конфигурации:
baseURL = "http://example.com/"
languageCode = "en-us"
title = "Привет"
theme = "minimal"
disqusShortname = "username" # delete this to disable disqus comments
googleAnalytics = ""
[params]
author = "Анвер Богатов"
description = "Личный островок в океане Интернета"
githubUsername = "#"
accent = "red"
showBorder = true
backgroundColor = "white"
font = "Raleway" # should match the name on Google Fonts!
highlight = true
highlightStyle = "default"
highlightLanguages = ["go", "haskell", "kotlin", "scala", "swift"]
[[menu.main]]
url = "/"
name = "🏠"
weight = 1
[[menu.main]]
url = "/about/"
name = "О проекте"
weight = 2
[[menu.main]]
url = "/post/"
name = "Статьи"
weight = 3
[[menu.main]]
url = "/books/"
name = "Книги"
weight = 4
[[menu.main]]
url = "/movies/"
name = "Фильмы"
weight = 5
# Social icons to be shown on the right-hand side of the navigation bar.
# The "name" field should match the name of the icon in Font Awesome.
# The list of available icons can be found at http://fontawesome.io/icons.
[[menu.icon]]
url = "mailto:contact@flower2u.com"
name = "fas fa-envelope"
weight = 1
[[menu.icon]]
url = "https://github.com/username/"
name = "fab fa-github"
weight = 2
[[menu.icon]]
url = "https://twitter.com/username/"
name = "fab fa-twitter"
weight = 3
[[menu.icon]]
url = "https://www.linkedin.com/in/username/"
name = "fab fa-linkedin"
weight = 4
[[menu.icon]]
url = "https://www.stackoverflow.com/username/"
name = "fab fa-stack-overflow"
weight = 5
Перед Вами - абсолютно стандартный файл конфигурации Hugo проекта. Точно такой же, или похожий, Вы можете получить просто создав новый проект Hugo веб сайта и установив какую-либо тему.
config.toml
(или config.yaml
в зависимости от того, в каком именно формате Вы управляете конфигурацией) располагается в корневой директории Hugo проекта.
Каждый раз, когда Вам нужно внести какие-либо изменения в конфигурацию Вашего проекта, Вы открываете этот config.toml
файл и вносите необходимые правки. Вот и всё. Это и есть стандартный способ управления конфигурацией Вашего Hugo веб сайта. Ничего сложного. Но у этого способа имеется ряд недостатков. Некоторые, могут быть довольно критическими для Вашего проекта.
Одной из самых первых проблем, с которой Вы можете столкнуться, работая над своим проектом, это - слишком длинная конфигурация. Действительно, по мере развития Вашего проекта конфигурация заполняется новыми и новыми параметрами. Интеграции с различными сервисами, работа с API ключами, многослойные навигационные меню и так далее - всё это может содержаться в файле конфигурации проекта. В какой-то момент, ловишь себя на мысли, что найти что-либо в файле конфигурации становится не просто из-за обилия информации.
Следующая проблема - поинтереснее. Предположим, Вы хотите сынтегрировать Ваш сайт с сервисом аналитики - например, Google Analytics. Многие Hugo темы сынтегрированы с этим сервисом изначально, и, всё, что Вам нужно сделать, чтобы начать работать с Google Analytics - это добавить свой google analytics идентификатор в файл конфигурации. Но - если Вы это сделаете, то тестовые запуски Вашего веб-сайта на Вашем рабочем компьютере будут генерировать статистику посещений. В Google Analytics нет способа отличить тестовую статистику, от статистики, полученной от реальных пользователей.
Ну и наконец - если Ваш сайт, должен поддерживать несколько языков - информацию по переводам различных элементов меню, например, так же придётся складировать в конфигурации.
Надеюсь, теперь Вы поняли, что простой подход с файлом конфигурации подходит только самым простым проектам или самым нетребовательным разработчикам. Hugo может предложить кое-что получше, что может решить все эти проблемы.
Config Folder
Как видно из название - Config Folder - это папка конфигурации; это буквально папка с конфигурацией проекта. Папка с конфигурацией содержит в себе всю конфигурацию Hugo проекта, разделённую на смысловые части, и, одна такая папка конфигурации полностью заменяет собой файл конфигурации config.toml
.
Config Folder должен быть расположен в корневой директории Hugo проекта и называться - config
.
Конфигурация по-умолчанию
Config Folder поддерживает конфигурацию по умолчанию и даёт возможность переопределять элементы конфигурации. Конфигурация по умолчанию хранится в директории config/_default
. Если перенести файл конфигурации config.toml
приведённый выше в папку _default
, то Ваш Hugo веб сайт продолжит свою работу. Дело в том, что Hugo знает, что любая конфигурация в папке _default
является базовой конфигурацией, используемой по умолчанию.
Теперь давайте разделим элементы нашей конфигурации на отдельные единицы. Делается это следующим образом:
- Выбираем одну смысловую группу параметров конфигурации, которую можно вынести в отдельный файл. В случае примера выше, такой группой может быть раздел
params
:
[params]
author = "Анвер Богатов"
description = "Личный островок в океане Интернета"
githubUsername = "#"
accent = "red"
showBorder = true
backgroundColor = "white"
font = "Raleway" # should match the name on Google Fonts!
highlight = true
highlightStyle = "default"
highlightLanguages = ["go", "haskell", "kotlin", "scala", "swift"]
- Создаём новый файл в
config/_default
под названием раздела - в нашем случае это будетparams
, расширение файла при этом выбирается согласно формату содержимого этого файла. Мы используем язык разметки toml для нашей конфигурации, поэтому полное название нового файла будет выглядет следующим образом -params.toml
. - Переносим содержимое блока
params
изconfig.toml
вparams.toml
. Перенести нужно само содержимое блока, без указание его названия, то есть -[params]
копировать не нужно. Его нужно удалить изconfig.toml
.
Вот такая структура должна получиться в результате этих действий:
config
└── _default
├── config.toml
└── params.toml
Если после этих действий перезапустить веб-сайт локально, он будет работать, как и прежде, потому что, мы не меняли конфигурацию, мы её реструктурировали.
Тоже самое, можно сделать и с другими секциями конфигурации. Например, с меню:
[[main]]
url = "/"
name = "🏠"
weight = 1
[[main]]
url = "/about/"
name = "О проекте"
weight = 2
[[main]]
url = "/post/"
name = "Статьи"
weight = 3
[[main]]
url = "/books/"
name = "Книги"
weight = 4
[[main]]
url = "/movies/"
name = "Фильмы"
weight = 5
Обратите внимание, в случае с меню изначально элементы меню назывались [[menu.main]]
в config.toml
, в новом файле menu.toml
каждый элемент носит название уже [[main]]
. Hugo автоматически загружает конфигурацию, учитывая именование самих файлов и их содержимого.
Переопределение конфигурации
Config Folder поддерживает переопределение конфигурации. Это означает, что мы можем задать значение какого-либо параметра в конфигурации по умолчанию, а для определённого окружения использовать другое его значение.
Что такое окружение в Hugo? Ваш сайт может быть запущен не только на Вашей локальной машине во время разработки, но и на публичных серверах в интернете. Точнее даже, именно размещение сайта на публичных серверах в интернете делает Ваш сайт доступным Вашим пользователям. Локальный компьютер и публичный сервер - это и есть окружения. Окружения могут быть разделены по типам. По умолчанию, Hugo поддерживает два типа окружения:
- development
- production
development
- это окружение, в котором Hugo запускает веб сайт на локальном компьютере, каждый раз, когда Вы выполняете команду hugo server
. Как можно догадаться из названия - это окружение предназначено для разработки Hugo проекта и не должно использоваться на при запуске сайта на публичных серверах.
production
- это окружение, в котором Hugo работает на публичных серверах и сайт доступен для реальных пользователей.
Для создания конфигурации, специфичной для окружения, достаточно в папке config
создать новую папку с названием окружения. Например - development
. Внутри новой папки мы можем переопределять любые параметры конфигурации по умолчанию. Например, чтобы переопределить значение параметра description
для development
окружения, достаточно добавить следующее содержимое:
description = "Привет от разработчика"
в файл - config/development/params.toml
. Полное содержимое Config Folder‘а в этом случае, будет выглядеть следующим образом:
config
├── _default
│ ├── config.toml
│ ├── menu.toml
│ └── params.toml
└── development
└── params.toml
Заключительная часть
Config Folder - отличный способ не только навести порядок в конфигурации собственного Hugo веб сайта, но и сделать её проще и гибче в плане поддержки.
Список материалов
Больше о конфигурации Hugo проекта можно узнать отсюда: