Pur esistendo Hugo, Eleventy, Astro e una dozzina di altri generatori di siti statici ben mantenuti, ho messo su questo sito con Publish, di John Sundell. È una decisione discutibile, quindi la spiego.
Il motivo, oltre al non voler avere niente a che fare con WordPress
Publish mi lascia definire il sito come una 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 }
}
E il tema come funzioni che restituiscono HTML, con il compilatore che sorveglia:
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")
}
}
)
}
Niente template con doppie graffe né errori che saltano fuori solo in fase di generazione. Se mi invento un campo di metadati, non compila. È la stessa sensazione di lavorare con SwiftUI, applicata all’HTML.
Gli inconvenienti
Conviene dirli:
- Publish non viene aggiornato da un po’. L’ultima versione con tag è la 0.9.0. Compila senza problemi con Swift 6.4, ma non aspettarti correzioni.
- La comunità è piccola. Rispetto a Hugo, qui c’è scritto poco e ci sono pochi temi da cui copiare.
- L’ecosistema di plugin è minimo. Quello che ti serve, probabilmente dovrai scrivertelo — anche se scrivere un
PublishingSteprichiede sorprendentemente poco codice.
Conclusione
Come esercizio per creare un sito che riesca a mantenere con poco sforzo, credo sia un buon inizio. Più avanti vedrò se mi toccherà passare a un altro strumento di generazione o se farò un fork di Publish per cambiare qualcosa.