Claro que eu sempre quis testar o gerador de site estático mais rápido que existe 😉.

Mas tudo com o middleman tava ótimo. Eu só realmente migrei do Middleman para o Hugo pois eu estava planejando escrever mais documentação para uma API. A API atual é documentada usando OpenApi Specification, mas acho que posso adicionar mais conteúdo.

Quando eu migrei do Jekyll para o Middleman as mudanças foram essas:

100 changed files with 519 additions and 346 deletions

Esta migração:

Showing 393 changed files with 3,357 additions and 6,192 deletions

A parte boa

Primeiro a parte boa com Hugo 😊.

(1) Velocidade: não é que seja rápido, é instantâneo!!!

(2) Hugo injeta código para hot-reloading. É o melhor que há 🎉.

(3) Shortcodes para fazer os md ficarem ainda mais DRYer .

Eu tenho um monte de posts com:

* * *
<abbr title="too long; didn't read">tl;dr</abbr>

Summary of this post here with code.
* * *

Antes eu tinha que copiar e colar tudo isso (exceto pelo conteúdo, claro). Se eu mudar o tema ou o css eu teria imensos problemas pq eu teria que mudar em todo lugar. Além disso eu nunca fiz muito para fazer isso “ficar bonito”, pois eu teria que copiar as mudanças…

Agora eu não tenho mais esse problema.

Para usar um shortcode crie o arquivo layouts/shortcodes/tldr.html (tldr pode ser qualquer nome):

<abbr title="too long; didn't read">tl;dr</abbr>

{{ printf "%s" .Inner | markdownify }}

E use-o assim:

{{< tldr  >}}
Summary of this post here with code.
{{< /tldr >}}

(4) Mesmo eu tendo problemas com a tradução dos posts é melhor seguir o Hugo nesse quesito.

(5) Criar um link para outros posts é diferente, ainda se usa markdown, mas agora é algo assim:

Click here to go to [other post]({{< ref "posts/other-post" >}}).

O mais legal de linkar desse jeito é que o hugo usa a tradução que o post foi escrito.

Problemas

(1) Primeiro, corrigir todas as tags. No Middleman (acredito que no Jekyll também) não havia nenhum problema com essa syntax:

tags: something, something2

Mas com Hugo tem que ser assim:

tags:
  - something
  - something2

Depois disso eu encontrei vários problemas com a tradução.

Todos os meus posts seguem esse padrão de nome de arquivo:

content/posts/2019-01-01-slug.md

A informação de idioma é a metadata lang dentro do header:

lang: pt-br
title: "Something"

(2) Aquela metadata lang é totalmente ignorada. Eu tive que remove TUDO e renomear os arquivos para esse padrão:

content/posts/slug.pt-br.md

A boa notícia é que o Hugo ignora também a tada no nome do arquivo e cria os slug baseado no título. Ou seja, eu mantive esse padrão: content/posts/2019-01-01-slug.pt-br.md.

(3) A tradução foi outro ponto que me deu trabalho. No Middleman eu fiz “minha própria tradução”. Um arquivo data/translations.yml com todas as traduções:

- como-importar-imdb-usando-csvkit: "pt-br"
  how-to-import-imdb-database-using-csvkit: "en"

E eu escrevi meu próprio código para linkar uma à outra.

Mas Hugo detecta a tradução baseado no nome do arquivo, para o exemplo anterior os arquivos deveriam ser:

content/posts/2019-01-01-how-to-import-imdb-database-using-csvkit.pt-br.md
content/posts/2019-01-01-how-to-import-imdb-database-using-csvkit.en.md

(4) E por causa disso eu tive outro problema com as URLs:

Se eu criar o arquivo content/posts/2019-01-01-something.en.md a URL será http://localhost:1313/something/ e o arquivo content/posts/2019-01-01-coisa.pt-br.md será http://localhost:1313/pt-br/coisa/.

Eu não tenho nenhum identificador de idioma na URL, por que a URL já é a tradução, ou seja, nunca haverá um conflito.

Seria muito trabalhoso criar um arquivo para redirecionar todas as URLs para esse novo formado, além disso e se eu sair da Netlify? Eu teria que me preocupar em criar um arquivo de redict para essa outra hospedagem. É mais fácil configurar a URL em cada post:

title: "Something"
date: "2006-09-01T04:47:00-03:00"
url: "/something"
tags:
  - unix

Eu não tenho que fazer isso para os posts em inglês mas para manter o padrão eu faço isso para todos.

(5) O título não aceita emojis 😐. Eu tive que usar algo como {{ .Title | emojify }}.

Outros problemas:

  • (6) Sitemap
  • (7) Atom
  • (8) Tradução do Sitemap, Atom ou robots.txt

Talvez eu faça um post para cada um desses 😊.

Ah, encontrei esse: awesome-hugo!