Existint Hugo, Eleventy, Astro i una dotzena més de generadors de webs estàtiques ben mantinguts, he muntat esta web amb Publish, de John Sundell. És una decisió discutible, així que l’explique.
El motiu, a més de no voler fer res amb Wordpress
Publish em deixa definir la web com un struct:
struct DavidNovella: Website {
enum SectionID: String, WebsiteSectionID {
case apps
case blog
}
var url = URL(string: "https://davidnovella.es")!
var name = "David Novella"
var language: Language { .spanish }
}
I el tema com a funcions que tornen HTML, amb el compilador vigilant:
func makeItemHTML(for item: Item<Site>,
context: PublishingContext<Site>) throws -> HTML {
HTML(
.lang(context.site.language),
.head(for: item, on: context.site),
.body {
SiteHeader(currentPath: item.path)
Wrapper {
H1(item.title)
Div(item.body).class("content")
}
}
)
}
No hi ha plantilles amb claus dobles ni errors que apareguen en generar. Si m’invente un camp de metadades, no compila. És la mateixa sensació que treballar amb SwiftUI, aplicada a l’HTML.
Els inconvenients
Convé dir-los:
- Publish porta temps sense actualitzar-se. L’última versió etiquetada és la 0.9.0. Compila sense problemes amb Swift 6.4, però no esperes correccions.
- La comunitat és xicoteta. Comparat amb Hugo, ací hi ha poc escrit i pocs temes per a copiar.
- L’ecosistema de connectors és mínim. El que necessites, probablement l’hauràs d’escriure tu, encara que escriure un
PublishingStepés sorprenentment poc codi.
Conclusió
Com a exercici per a crear una web que em resulte mantenible amb poc esforç crec que és un bon començament. Més endavant veuré si em toca canviar a una altra ferramenta de generació o si faig un fork de Publish i canvie alguna cosa.