Lezioni apprese aggiornando il mio blog
Astro, Tailwind, MDX, Pagefind e altro!
Recentemente, ho iniziato un percorso per aggiornare il mio sito Gatsby v1 di 8+ anni.
Questo post condividerà alcune lezioni imparate durante il processo e le tecnologie interessanti esplorate.
Indice
- Requisiti del progetto
- Scelta dello stack tecnologico adatto
- Astro: Curva di apprendimento e funzionalità chiave
- CSS moderno: Wow
- Ricerca: Pagefind
- Commenti: Utterances
- Tailwind: Regretti
- Conclusione
Requisiti del progetto
Prima di immergermi nell’aggiornamento, ho stabilito un insieme di requisiti:
Dato che il mio blog riceve un numero molto variabile di visualizzazioni giornaliere, ho pensato che un sito generato staticamente in anticipo mi offrisse le prestazioni desiderate senza aggiungere complessità extra.
Inoltre, dovevo mantenere le funzionalità esistenti del sito, tra cui:
- Evidenziazione del codice
- Commenti
- Ricerca nel sito
- Componenti React esistenti: Quiz UI, Gist embed
- Modulo di contatto
- Immagini responsive
- Tempo di caricamento inferiore a 1 secondo
- Compatibilità browser: 2018+
- Distribuzione automatizzata + basata su PR
Scelta dello stack tecnologico adatto
Nel corso degli anni ho lavorato con molti strumenti per siti statici, da Jekyll, Hugo, Slate e Gatsby. Nonché con molti framework front-end: Ember, Knockout, Angular, Vue e ovviamente React.
Quindi, ho precisamente troppe opzioni, che alla fine ho ridotto a Remix, Next.js e Astro,
Potrei scrivere un’intera serie di blog sul mio processo di valutazione, ma qui farò un riepilogo:
Ho scelto Astro per quanto velocemente potessi fare cose significative.
La loro API è sorprendentemente semplice. È un ottimo equilibrio tra flessibilità e buone opinioni di design.
Era rassicurante che Astro non abbia una chiara preferenza per il cloud o un’agenda framework.
Astro non è l’unica tecnologia che ho usato, ecco una panoramica completa dello stack:
- Astro: Un moderno generatore di siti statici.
- ShadcnUI: Una raccolta di componenti riutilizzabili.
- Tailwind CSS: Un framework CSS a base di utilità.
- MDX: Contenuti Markdown + componenti inline.
- Pagefind: Libreria di ricerca per siti veloce, statica e offline. Non c’è bisogno di Algolia!
- Utterances: Sistema di commenti basato su problemi GitHub.
- Netlify: Distribuzioni automatizzate, modulo di contatto con captcha.
Astro: Curva di Apprendimento e Funzionalità Principali
Astro è diventato rapidamente il pilastro del mio aggiornamento.
Ecco alcune funzionalità che ho trovato particolarmente utili:
.astrofiles: A prima vista, i componenti Astro potrebbero sembrare simili ai componenti JSX di React, ma sono molto diversi e hanno obiettivi diversi. (Vedi tabella di confronto qui sotto.)- Sostenuti dai propri strumenti di build in Golang e da Vite: funziona senza problemi. Gestisce in modo trasparente ESM/CJS, TypeScript, bundling del codice, stili, immagini, ecc.
- Nessun pregiudizio verso framework o piattaforme cloud. (Cough Next.js, OpenNext)
- Renditura statica vs. ibrida: Astro offre flessibilità per targetizzare la maggior parte delle piattaforme cloud: AWS, GCP, Firebase, Netlify, Vercel, Cloudflare Pages, Azure, Fly.io, e molte altre.
- Content collections: L’API
getCollectionsemplifica l’uso dei file di contenuto come fonte di dati. - Routing basato sui file: Il sistema di routing basato sui file di Astro, combinato con
getStaticPaths, rende semplicissimo generare pagine. - SEO: Astro non si mette mai tra te e il tuo lavoro, ed emette una quantità minima di
detritiboilerplate (astro-island) solo quando necessario.
Alcune cose erano un po’ sorprendenti, come lo styling intorno al markup iniettato da Astro e l’effetto di display:contents.
<style>astro-island,astro-slot,astro-static-slot{display:contents}</style>Confronto tra .astro e componenti client
I componenti Astro sono essenzialmente modelli HTML con un modello di componenti e props potente. Possono recuperare dati al momento della costruzione, accedere a risorse backend e nascondere informazioni sensibili.
Il modo migliore per comprendere i componenti .astro di Astro è confrontarli con i componenti lato client. (React, Vue, Svelte, ecc.)
| Cosa devi fare? | Componente .astro | Componente client |
|---|---|---|
| Generare HTML con un modello di componenti potente | ✅ | ❌ |
| Recuperare dati al momento della costruzione | ✅ | ❌ |
| Accedere a risorse backend (direttamente) | ✅ | ❌ |
| Nascondere informazioni sensibili (token di accesso, chiavi API, ecc) | ✅ | ❌ |
| Ridurre il JavaScript lato client | ✅ | ❌ |
| Usare componenti client (React, Vue, Svelte, ecc) | ✅ | ✅ |
Aggiungere interattività ed event listener (onClick(), onChange(), ecc) | ❌ | ✅ |
Usare Stato ed Effetti di ciclo di vita (useState(), useReducer(), useEffect(), ecc) | ❌ | ✅ |
| Usare API solo del browser | ❌ | ✅ |
| Usare hook personalizzati che dipendono da stato, effetti o API solo del browser | ❌ | ✅ |
CSS moderno: Wow
Tornando allo sviluppo frontend, sono rimasto sorpreso dagli avanzamenti delle funzionalità native CSS:
- Variabili CSS: Disponibili da tempo, e abbastanza stabili tra i browser sin dal 202*.
- Nesting: Finalmente nella specifica, senza la sintassi inizialmente ingombrante. Ora è simile a Less o SCSS.
- Selettori nuovi:
:is(),:where()e:has()offrono un targeting più preciso degli elementi. - Unità moderne come
ch,vwe funzioni comeclamp()offrono un controllo migliore sui layout e la tipografia. - Imposta gli spazi in modo più naturale con gli attributi
-inlinee-block. Imposta padding o margini sull’asse orizzontale o verticale. Invece dimargin: 0 1rem 0 1rem→margin-inline: 1rem. - Layout avanzati: Riguardare CSS Grid. Wow, ci sono un sacco di cose lì dentro. Può sembrare scoraggiante con le infinite possibilità di utilizzo. Tieni presente che ti puoi accontentare di imparare 1 o 2 modi. Controlla questi fantastici risorse che mi hanno aiutato a fare trucchi con la griglia: Il video di Kevin Powell: Impara CSS Grid in modo semplice, Responsive senza query media, Dieci layout moderni in una riga di CSS.
Ricerca: Pagefind
Implementare una ricerca sul sito senza servizi terzi o hosting di database sembrava una sfida divertente. Dopotutto, non è come se avessi 10.000 post da indicizzare (ancora.)
Navigando tra le integrazioni della community Astro ho scoperto uno strumento fantastico di cui avrei voluto sapere prima: Pagefind.
Pochi strumenti risolvono un problema tanto bene quanto Pagefind risolve la ricerca su sito locale.
La semplicità nell’implementare Pagefind è una gioia. Può essere integrato con qualsiasi contenuto di un sito statico, e puoi scegliere se utilizzare un’interfaccia predefinita o costruire qualcosa di personalizzato a tuo piacimento.
Risolveva perfettamente ogni mia esigenza. L’integrazione ha richiesto solo pochi minuti, e la maggior parte del lavoro consisteva nell’aggiungere un tag <div id="search"></div> e un po’ di stile!
Commenti: Utterances
Purtroppo ho dovuto salutare Disqus e i commenti accumulati negli anni.
Volevo un controllo e una visibilità migliori sugli script di terze parti sul mio sito.
Inoltre, doveva essere semplice e mantenibile.
Mi ha portato a scegliere il fantastico servizio Utterances. Il suo sistema di commenti basato su GitHub (issues) si allinea bene con il mio pubblico. Inoltre, è facile da configurare e gratuito.
Tailwind: Regretti
C’è solo un aspetto tecnologico di cui mi sto sempre più pentendo di aver utilizzato: Tailwind.
Nel tempo, posso percepire la differenza di costo tra scriverlo e mantenerlo. Tailwind è così veloce da scrivere, però una volta che diventa abbastanza complesso, può diventare noioso da leggere e estendere.
Conclusione
Aggiornare il mio vecchio sito Gatsby v1 a uno stack moderno costruito intorno ad Astro è stata un’esperienza divertente. 10/10 lo consiglierei.
Se stai valutando di aggiornare un sito vecchio o di costruire un nuovo sito statico (o ibrido), ti consiglio vivamente di considerare Astro. La curva di apprendimento potrebbe essere ripida in alcuni momenti, ma i benefici in termini di prestazioni, esperienza dello sviluppatore e protezione del tuo progetto per il futuro ne valgono sicuramente la pena.