Переезд блога с jekyll на hugo

· 2 min read

Недавно прочитал статью про фронтенд без javascript’a и решил, что пора переделать бложик на старый манер: только html, только css. А раз начну переделывать, то заодно можно съехать с jekyll.

TL;DR: страница блога похудела в 3 раза: было 237 килобайт, стало 83. Можно порезать гуглоаналитику и станет ещё в 2 раза легче.

PageSpeed 100

Причины большого веса страниц.

  • Грузил никому ненужную аватарку прямиком с гитхаба.
  • Подключал highlight js, хотя это можно делать на этапе сборки странички.
  • Использовал стороннюю тему и там было много всего, хотя сейчас есть flex и CSS grid, поэтому можно половину выкинуть.

Причины миграции на hugo вместо jekyll.

Плюсы:

  • Hugo использует бонус golang в виде компиляции в один бинарник, и не надо мучаться с настройкой rvm-ruby-bundler-jekyll.
  • Hugo умеет импортировать jekyll репозиторий: hugo import jekyll /path/to/src.
  • Hugo получил поддержку общества, поэтому уже есть и темы, и всякие ништячки локализации.
  • В hugo много настроек и собирает css/js самостоятельно без помощи внешних утилит.

Минусы:

  • Go templates - это худший шаблонизатор в мире. Уверен, что кто пользовались jinja2 сразу поймут боль.
  • Слишком много настроек из-за чего иногда сложно найти, как сделать что-то простое.

Подводные камни при переезде.

  1. Если вы используете Github User Page, а не Github Project Page, то вам не повезло и папку docs/ в репозитории вы использовать не можете. Вместо этого придеться в репозиторий .github.io класть сразу сгенерированную статику. То есть, необходимо создать ещё один репозиторий, где будет hugo, а предыдущий подключить в качестве сабмодуля гита.
  2. Если вы мигрируете с jekyll, то не забудьте удалить предыдущий config.yaml из репозитория, иначе gihub будет считать, что это jekyll репозиторий и попробует его собрать.
  3. По-умолчанию, jekyll использует название файла в качестве пути, а hugo повторяет иерархию папок. Для того, чтобы повторить поведение, можно в config.yaml прописать опцию permalinks, или же в каждом файле использовать опцию alias.

Доделки-доделочки.

  • Надо отказаться от google analytics, так как это от лукавого. Сначала думал сделать свой пиксель, а сейчас думаю зачем мне трекать кто читает?
  • Добавить переключалку на ночную тему. Задача со звёздочкой сделать это без js :)