From 448266cd3fd8a8324e53ebae2f9703ab1fe98422 Mon Sep 17 00:00:00 2001 From: HiDeoo <494699+HiDeoo@users.noreply.github.com> Date: Thu, 2 Oct 2025 21:01:30 +0200 Subject: [PATCH] i18n(it): remove outdated translations [i18nIgnore] --- .../docs/it/basics/astro-components.mdx | 4 +- src/content/docs/it/basics/astro-pages.mdx | 4 +- src/content/docs/it/basics/layouts.mdx | 2 +- src/content/docs/it/guides/astro-db.mdx | 751 -------------- .../docs/it/guides/backend/appwriteio.mdx | 13 - .../it/guides/backend/google-firebase.mdx | 920 ------------------ src/content/docs/it/guides/backend/index.mdx | 31 - .../docs/it/guides/backend/supabase.mdx | 502 ---------- src/content/docs/it/guides/backend/turso.mdx | 126 --- src/content/docs/it/guides/backend/xata.mdx | 110 --- .../docs/it/guides/configuring-astro.mdx | 170 ---- .../docs/it/guides/deploy/cloudflare.mdx | 140 --- src/content/docs/it/guides/deploy/deno.mdx | 179 ---- src/content/docs/it/guides/deploy/zerops.mdx | 164 ---- src/content/docs/it/guides/endpoints.mdx | 223 ----- src/content/docs/it/guides/fonts.mdx | 136 --- .../docs/it/guides/framework-components.mdx | 240 ----- .../docs/it/guides/integrations-guide/db.mdx | 255 ----- .../it/guides/integrations-guide/index.mdx | 268 ----- src/content/docs/it/guides/prefetch.mdx | 217 ----- src/content/docs/it/guides/routing.mdx | 474 --------- src/content/docs/it/guides/upgrade-to/v2.mdx | 424 -------- .../docs/it/recipes/add-yaml-support.mdx | 64 -- .../it/recipes/build-custom-img-component.mdx | 128 --- src/content/docs/it/recipes/bun.mdx | 137 --- .../docs/it/recipes/call-endpoints.mdx | 41 - src/content/docs/it/recipes/captcha.mdx | 76 -- .../docs/it/recipes/external-links.mdx | 65 -- src/content/docs/it/recipes/index.mdx | 25 - src/content/docs/it/recipes/sharing-state.mdx | 86 -- .../docs/it/reference/astro-syntax.mdx | 176 ---- src/content/docs/it/tutorial/2-pages/3.mdx | 2 +- src/content/docs/it/tutorial/2-pages/4.mdx | 2 +- src/content/docs/it/tutorial/2-pages/5.mdx | 2 +- .../docs/it/tutorial/5-astro-api/2.mdx | 2 +- .../docs/it/tutorial/5-astro-api/3.mdx | 2 +- src/content/docs/it/tutorial/6-islands/1.mdx | 2 +- src/content/docs/it/tutorial/6-islands/4.mdx | 2 +- 38 files changed, 12 insertions(+), 6153 deletions(-) delete mode 100644 src/content/docs/it/guides/astro-db.mdx delete mode 100644 src/content/docs/it/guides/backend/appwriteio.mdx delete mode 100644 src/content/docs/it/guides/backend/google-firebase.mdx delete mode 100644 src/content/docs/it/guides/backend/index.mdx delete mode 100644 src/content/docs/it/guides/backend/supabase.mdx delete mode 100644 src/content/docs/it/guides/backend/turso.mdx delete mode 100644 src/content/docs/it/guides/backend/xata.mdx delete mode 100644 src/content/docs/it/guides/configuring-astro.mdx delete mode 100644 src/content/docs/it/guides/deploy/cloudflare.mdx delete mode 100644 src/content/docs/it/guides/deploy/deno.mdx delete mode 100644 src/content/docs/it/guides/deploy/zerops.mdx delete mode 100644 src/content/docs/it/guides/endpoints.mdx delete mode 100644 src/content/docs/it/guides/fonts.mdx delete mode 100644 src/content/docs/it/guides/framework-components.mdx delete mode 100644 src/content/docs/it/guides/integrations-guide/db.mdx delete mode 100644 src/content/docs/it/guides/integrations-guide/index.mdx delete mode 100644 src/content/docs/it/guides/prefetch.mdx delete mode 100644 src/content/docs/it/guides/routing.mdx delete mode 100644 src/content/docs/it/guides/upgrade-to/v2.mdx delete mode 100644 src/content/docs/it/recipes/add-yaml-support.mdx delete mode 100644 src/content/docs/it/recipes/build-custom-img-component.mdx delete mode 100644 src/content/docs/it/recipes/bun.mdx delete mode 100644 src/content/docs/it/recipes/call-endpoints.mdx delete mode 100644 src/content/docs/it/recipes/captcha.mdx delete mode 100644 src/content/docs/it/recipes/external-links.mdx delete mode 100644 src/content/docs/it/recipes/index.mdx delete mode 100644 src/content/docs/it/recipes/sharing-state.mdx delete mode 100644 src/content/docs/it/reference/astro-syntax.mdx diff --git a/src/content/docs/it/basics/astro-components.mdx b/src/content/docs/it/basics/astro-components.mdx index 38a0a860ccd22..4505572dcef1d 100644 --- a/src/content/docs/it/basics/astro-components.mdx +++ b/src/content/docs/it/basics/astro-components.mdx @@ -10,7 +10,7 @@ I componenti Astro sono estremamente flessibili. Spesso, un componente Astro con La cosa più importante da sapere sui componenti Astro è che **non vengono renderizzati sul client**. Eseguono il rendering in HTML in fase di compilazione o su richiesta utilizzando il [rendering lato server (SSR)](/it/guides/on-demand-rendering/). Puoi includere il codice JavaScript all'interno del frontmatter del tuo componente e tutto verrà rimosso dalla pagina finale inviata ai browser dei tuoi utenti. Il risultato è un sito più veloce, con zero impatto JavaScript aggiunto per impostazione predefinita. -Quando il tuo componente Astro necessita di interattività lato client, puoi aggiungere [tag HTML standard ` -``` - -`src/pages/dashboard.astro` verificherà il cookie per la sessione dell'utente utilizzando l'app server di Firebase. Se l'utente non è autenticato, la pagina reindirizzerà l'utente alla pagina `/signin`. - -La pagina d'esempio qui sotto mostrerà il nome dell'utente e un pulsante per disconnettersi. Cliccando sul pulsante invierà una richiesta `GET` all'endpoint `/api/auth/signout`. - -L'endpoint eliminerà il cookie per la sessione dell'utente e reindirizzerà l'utente alla pagina `/signin`. - -```astro title="src/pages/dashboard.astro" ---- -import { app } from "../firebase/server"; -import { getAuth } from "firebase-admin/auth"; -import Layout from "../layouts/Layout.astro"; - -const auth = getAuth(app); - -/* Verifica la sessione corrente */ -if (!Astro.cookies.has("__session")) { - return Astro.redirect("/signin"); -} -const sessionCookie = Astro.cookies.get("__session").value; -const decodedCookie = await auth.verifySessionCookie(sessionCookie); -const user = await auth.getUser(decodedCookie.uid); - -if (!user) { - return Astro.redirect("/signin"); -} ---- - - -

Benvenuto {user.displayName}

-

Siamo felici di vederti qui

-
- -
-
-``` - -### Aggiunta dei provider OAuth - -Per aggiungere provider OAuth all'app, è necessario abilitarli nella console di Firebase. - -Nella console di Firebase, vai nella sezione **Autenticazione** e clicca sulla scheda **Metodo di accesso**. Quindi, clicca sul pulsante **Aggiungi un nuovo provider** e abilita i provider che desideri utilizzare. - -L'esempio seguente utilizza il provider **Google**. - -Modifica la pagina `signin.astro` per aggiungere: -- un pulsante per effettuare l'accesso con Google sotto il form esistente -- un listener degli eventi per pulsante per gestire il processo di accesso nel tag ` -``` - -Quando viene cliccato, il pulsante di accesso a Google aprirà una finestra popup per effettuare l'accesso. Una volta che l'utente effettua l'accesso, invierà una richiesta `POST` all'endpoint `/api/auth/signin` con il token ID generato dal provider OAuth. - -L'endpoint verificherà il token ID e creerà un nuovo cookie per la sessione dell'utente. Quindi, l'endpoint reindirizzerà l'utente alla pagina `/dashboard`. - -## Connessione al database Firestore - -### Prerequisiti - -- Un progetto Astro inizializzato con Firebase come descritto nella sezione: [Inizializzazione di Firebase in Astro](#inizializzazione-di-firebase-in-astro). - -- Un progetto Firebase con un database Firestore. Puoi seguire la [documentazione di Firebase per creare un nuovo progetto e configurare un database Firestore](https://firebase.google.com/docs/firestore/quickstart). - -In questa guida, la collection Firestore si chiamerà **friends** e conterrà documenti con i seguenti campi: - -- `id`: generato automaticamente da Firestore -- `name`: un campo di tipo stringa -- `age`: un campo di tipo numero -- `isBestFriend`: un campo di tipo booleano - -### Creazione degli endpoint del server - -Crea due nuovi file in una nuova cartella `src/pages/api/friends/`: `index.ts` e `[id].ts`. Questi creeranno due punti finali server per interagire con il database Firestore nei seguenti modi: - -- `POST /api/friends`: per creare un nuovo documento nella collection friends. -- `POST /api/friends/:id`: per aggiornare un documento nella collection friends. -- `DELETE /api/friends/:id`: per eliminare un documento nella collection friends. - -`index.ts` conterrà il codice per creare un nuovo documento nella collection friends: - -```ts title="src/pages/api/friends/index.ts" -import type { APIRoute } from "astro"; -import { app } from "../../../firebase/server"; -import { getFirestore } from "firebase-admin/firestore"; - -export const POST: APIRoute = async ({ request, redirect }) => { - const formData = await request.formData(); - const name = formData.get("name")?.toString(); - const age = formData.get("age")?.toString(); - const isBestFriend = formData.get("isBestFriend") === "on"; - - if (!name || !age) { - return new Response("Missing required fields", { - status: 400, - }); - } - try { - const db = getFirestore(app); - const friendsRef = db.collection("friends"); - await friendsRef.add({ - name, - age: parseInt(age), - isBestFriend, - }); - } catch (error) { - return new Response("Something went wrong", { - status: 500, - }); - } - return redirect("/dashboard"); -}; -``` - -:::note -Questa è un'implementazione di base dell'endpoint `friends`. Puoi aggiungere ulteriore logica questo endpoint per adattarle alle tue esigenze. -::: - -`[id].ts` conterrà il codice per aggiornare ed eliminare un documento nella collection friends: - -```ts title="src/pages/api/friends/[id].ts" -import type { APIRoute } from "astro"; -import { app } from "../../../firebase/server"; -import { getFirestore } from "firebase-admin/firestore"; - -const db = getFirestore(app); -const friendsRef = db.collection("friends"); - -export const POST: APIRoute = async ({ params, redirect, request }) => { - const formData = await request.formData(); - const name = formData.get("name")?.toString(); - const age = formData.get("age")?.toString(); - const isBestFriend = formData.get("isBestFriend") === "on"; - - if (!name || !age) { - return new Response("Missing required fields", { - status: 400, - }); - } - - if (!params.id) { - return new Response("Cannot find friend", { - status: 404, - }); - } - - try { - await friendsRef.doc(params.id).update({ - name, - age: parseInt(age), - isBestFriend, - }); - } catch (error) { - return new Response("Something went wrong", { - status: 500, - }); - } - return redirect("/dashboard"); -}; - -export const DELETE: APIRoute = async ({ params, redirect }) => { - if (!params.id) { - return new Response("Cannot find friend", { - status: 404, - }); - } - - try { - await friendsRef.doc(params.id).delete(); - } catch (error) { - return new Response("Something went wrong", { - status: 500, - }); - } - return redirect("/dashboard"); -}; -``` - -:::note -Questa è un'implementazione di base dell'endpoint `friends/:id`. Puoi aggiungere ulteriore logica a questo endpoint per adattarlo alle tue esigenze. -::: - -Dopo aver creato gli endpoint server per Firestore, la cartella del tuo progetto dovrebbe ora includere questi nuovi file: - - -- src - - env.d.ts - - firebase - - client.ts - - server.ts - - pages - - api - - friends - - **index.ts** - - **[id].ts** -- .env -- astro.config.mjs -- package.json - - -### Creazione delle pagine - -Crea le pagine che utilizzeranno gli endpoint di Firestore: - -- `src/pages/add.astro` - conterrà un form per aggiungere un nuovo amico. -- `src/pages/edit/[id].ts` - conterrà un form per modificare un amico e un pulsante per eliminare un amico. -- `src/pages/friend/[id].ts` - conterrà i dettagli di un amico. -- `src/pages/dashboard.astro` - mostrerà un elenco con tutti gli amici. - -#### Aggiungi un nuovo record - -L'esempio di `src/pages/add.astro` qui sotto include un form che invierà una richiesta `POST` all'endpoint `/api/friends`. Questo endpoint creerà un nuovo amico utilizzando i dati dal form e quindi reindirizzerà l'utente alla pagina `/dashboard`. - -```astro title="src/pages/add.astro" ---- -import Layout from "../layouts/Layout.astro"; ---- - - -

Aggiungi un nuovo amico

-
- - - - - - - -
-
-``` - -#### Modifica o Elimina un record - -`src/pages/edit/[id].astro` conterrà un form per modificare i dati di un amico e un pulsante per eliminarlo. All'invio, questa pagina invierà una richiesta `POST` all'endpoint `/api/friends/:id` per aggiornare i dati di un amico. - -Se l'utente clicca il pulsante per eliminare un amico, questa pagina invierà una richiesta `DELETE` all'endpoint `/api/friends/:id` per eliminare un amico. - -```astro title="src/pages/edit/[id].astro" ---- -import Layout from "../../layouts/Layout.astro"; -import { app } from "../../firebase/server"; -import { getFirestore } from "firebase-admin/firestore"; - -interface Friend { - name: string; - age: number; - isBestFriend: boolean; -} - -const { id } = Astro.params; - -if (!id) { - return Astro.redirect("/404"); -} - -const db = getFirestore(app); -const friendsRef = db.collection("friends"); -const friendSnapshot = await friendsRef.doc(id).get(); - -if (!friendSnapshot.exists) { - return Astro.redirect("/404"); -} - -const friend = friendSnapshot.data() as Friend; ---- - - -

Modifica {friend.name}

-

Qui puoi modificare o eliminare i dati del tuo amico.

-
- - - - - - - -
- -
- -``` - -#### Visualizza un singolo record - -`src/pages/friend/[id].astro` visualizzerà i dettagli di un solo amico. - -```astro title="src/pages/friend/[id].astro" ---- -import Layout from "../../layouts/Layout.astro"; -import { app } from "../../firebase/server"; -import { getFirestore } from "firebase-admin/firestore"; - -interface Friend { - name: string; - age: number; - isBestFriend: boolean; -} - -const { id } = Astro.params; - -if (!id) { - return Astro.redirect("/404"); -} - -const db = getFirestore(app); -const friendsRef = db.collection("friends"); -const friendSnapshot = await friendsRef.doc(id).get(); - -if (!friendSnapshot.exists) { - return Astro.redirect("/404"); -} - -const friend = friendSnapshot.data() as Friend; ---- - - -

{friend.name}

-

Età: {friend.age}

-

Migliore amico: {friend.isBestFriend ? "Sì" : "No"}

-
-``` - -#### Mostra una lista di record con un bottone per modificarli - -Infine, `src/pages/dashboard.astro` mostrerà una lista degli amici. Ogni amico avrà un link alla loro pagina e un bottone che li manderà sulla pagina per modificare l'amico. - -```astro title="src/pages/dashboard.astro" ---- -import { app } from "../firebase/server"; -import { getFirestore } from "firebase-admin/firestore"; -import Layout from "../layouts/Layout.astro"; - -interface Friend { - id: string; - name: string; - age: number; - isBestFriend: boolean; -} - -const db = getFirestore(app); -const friendsRef = db.collection("friends"); -const friendsSnapshot = await friendsRef.get(); -const friends = friendsSnapshot.docs.map((doc) => ({ - id: doc.id, - ...doc.data(), -})) as Friend[]; ---- - - -

Amici

- -
- -``` - -Dopo aver creato tutti i file il tuo progetto dovrebbe avere una struttura come questa: - - -- src - - env.d.ts - - firebase - - client.ts - - server.ts - - pages - - dashboard.astro - - add.astro - - edit - - [id].astro - - friend - - [id].astro - - api - - friends - - index.ts - - [id].ts -- .env -- astro.config.mjs -- package.json - - -## Risorse della community - -- [Astro e Firebase SSR app di esempio](https://github.com/kevinzunigacuellar/astro-firebase) -- [Utilizzare Firebase Realtime Database in Astro con Vue: una guida passo passo](https://www.launchfa.st/blog/vue-astro-firebase-realtime-database-it) diff --git a/src/content/docs/it/guides/backend/index.mdx b/src/content/docs/it/guides/backend/index.mdx deleted file mode 100644 index 60e0c158e6023..0000000000000 --- a/src/content/docs/it/guides/backend/index.mdx +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: Utilizzare un servizio backend con Astro -description: Come utilizzare un servizio backend per aggiungere autenticazione, archiviazione e dati -i18nReady: true ---- -import BackendGuidesNav from '~/components/BackendGuidesNav.astro'; - -**Pronto per aggiungere funzionalità come autenticazione, archiviazione dei dati al tuo progetto Astro?** Segui una delle nostre guide per integrare un servizio backend. - -:::tip -Scopri le [integrazioni mantenute dalla community](https://astro.build/integrations/) per aggiungere funzionalità popolari al tuo progetto. -::: - -## Guide per servizi backend - -Nota che molte di queste pagine sono **abbozzi**: sono raccolte di risorse in attesa del tuo contributo! - - - -## Che cos'è un servizio backend? - -Un servizio backend è un sistema basato su un cloud che ti aiuta a costruire e gestire la tua infrastruttura backend. Fornisce un insieme di strumenti e servizi per la gestione di database, autenticazione degli utenti e altre funzionalità lato server. Questo ti consente di concentrarti sulla costruzione delle tue applicazioni senza doverti preoccupare della gestione dell'infrastruttura sottostante. - -## Perché dovrei utilizzare un servizio backend? - -Potresti voler considerare l'utilizzo di un servizio backend se il tuo progetto ha esigenze complesse lato server, ad esempio: -- registrazione e autenticazione degli utenti -- archiviazione persistente dei dati -- archiviazione di risorse caricate dagli utenti -- generazione di API -- comunicazione in tempo reale diff --git a/src/content/docs/it/guides/backend/supabase.mdx b/src/content/docs/it/guides/backend/supabase.mdx deleted file mode 100644 index f29425cb055d0..0000000000000 --- a/src/content/docs/it/guides/backend/supabase.mdx +++ /dev/null @@ -1,502 +0,0 @@ ---- -title: Supabase e Astro -description: Aggiungi un backend al tuo progetto con Supabase -type: backend -service: Supabase -i18nReady: true ---- -import PackageManagerTabs from '~/components/tabs/PackageManagerTabs.astro' -import { FileTree } from '@astrojs/starlight/components'; - -[Supabase](https://supabase.com/) è un'alternativa open source a Firebase. Fornisce un database Postgres, autenticazione, funzioni edge, sottoscrizioni in tempo reale e archiviazione. - -## Inizializzazione di Supabase in Astro - -### Prerequisiti - -- Un progetto Supabase. Se non ne hai uno, puoi registrarti gratuitamente su [supabase.com](https://supabase.com/) e creare un nuovo progetto. -- Un progetto Astro con il [rendering lato server (SSR)](/it/guides/on-demand-rendering/) abilitato. -- Credenziali Supabase per il tuo progetto. Puoi trovarle nella scheda **Settings > API** del tuo progetto Supabase. - - `SUPABASE_URL`: L'URL del tuo progetto Supabase. - - `SUPABASE_ANON_KEY`: La chiave anonima per il tuo progetto Supabase. - -### Aggiunta delle credenziali Supabase - -Per aggiungere le tue credenziali Supabase al tuo progetto Astro, aggiungi quanto segue al tuo file `.env`: - -```ini title=".env" -SUPABASE_URL=YOUR_SUPABASE_URL -SUPABASE_ANON_KEY=YOUR_SUPABASE_ANON_KEY -``` - -Ora, queste variabili d'ambiente sono disponibili nel tuo progetto. - -Se desideri avere IntelliSense per le tue variabili d'ambiente, modifica o crea il file `env.d.ts` nella tua directory `src/` e aggiungi quanto segue: - -```ts title="src/env.d.ts" -interface ImportMetaEnv { - readonly SUPABASE_URL: string - readonly SUPABASE_ANON_KEY: string -} - -interface ImportMeta { - readonly env: ImportMetaEnv -} -``` - -:::tip -Leggi di più sulle [variabili d'ambiente](/it/guides/environment-variables/) e i file `.env` in Astro. -::: - -Il tuo progetto dovrebbe ora includere questi file: - - -- src/ - - **env.d.ts** -- **.env** -- astro.config.mjs -- package.json - - -### Installazione delle dipendenze - -Per connetterti a Supabase, dovrai installare `@supabase/supabase-js` nel tuo progetto. - - - - ```shell - npm install @supabase/supabase-js - ``` - - - ```shell - pnpm add @supabase/supabase-js - ``` - - - ```shell - yarn add @supabase/supabase-js - ``` - - - -Successivamente, crea una cartella chiamata `lib` nella tua directory `src/`. Qui aggiungerai il tuo client Supabase. - -In `supabase.ts`, aggiungi quanto segue per inizializzare il tuo client Supabase: - -```ts title="src/lib/supabase.ts" -import { createClient } from "@supabase/supabase-js"; - -export const supabase = createClient( - import.meta.env.SUPABASE_URL, - import.meta.env.SUPABASE_ANON_KEY, -); -``` - -Ora, il tuo progetto dovrebbe includere questi file: - - -- src/ - - lib/ - - **supabase.ts** - - env.d.ts -- .env -- astro.config.mjs -- package.json - - -## Aggiunta dell'autenticazione con Supabase - -Supabase fornisce l'autenticazione out of the box. Supporta l'autenticazione email/password e l'autenticazione OAuth con molti provider, tra cui GitHub, Google e molti altri. - -### Prerequisiti - -- Un progetto Astro [inizializzato con Supabase](#inizializzazione-di-supabase-in-astro). -- Un progetto Supabase con l'autenticazione email/password abilitata. Puoi abilitarla nella scheda **Authentication > Providers** del tuo progetto Supabase. - -### Creazione degli endpoint server di autenticazione - -Per aggiungere l'autenticazione al tuo progetto, dovrai creare alcuni endpoint server. Questi endpoint verranno utilizzati per registrare, accedere e disconnettere gli utenti. - -- `POST /api/auth/register`: per registrare un nuovo utente. -- `POST /api/auth/signin`: per accedere come utente. -- `GET /api/auth/signout`: per disconnettere un utente. - -Crea questi endpoint nella directory `src/pages/api/auth` del tuo progetto. Il tuo progetto dovrebbe ora includere questi nuovi file: - - -- src/ - - lib/ - - supabase.ts - - pages/ - - api/ - - auth/ - - **signin.ts** - - **signout.ts** - - **register.ts** - - env.d.ts -- .env -- astro.config.mjs -- package.json - - -`register.ts` crea un nuovo utente in Supabase. Accetta una richiesta `POST` con un'email e una password. Quindi utilizza l'SDK di Supabase per creare un nuovo utente. - -```ts title="src/pages/api/auth/register.ts" -import type { APIRoute } from "astro"; -import { supabase } from "../../../lib/supabase"; - -export const POST: APIRoute = async ({ request, redirect }) => { - const formData = await request.formData(); - const email = formData.get("email")?.toString(); - const password = formData.get("password")?.toString(); - - if (!email || !password) { - return new Response("Email e password sono obbligatorie", { status: 400 }); - } - - const { error } = await supabase.auth.signUp({ - email, - password, - }); - - if (error) { - return new Response(error.message, { status: 500 }); - } - - return redirect("/signin"); -}; -``` - -`signin.ts` accede come utente. Accetta una richiesta `POST` con un'email e una password. Quindi utilizza l'SDK di Supabase per accedere come utente. - -```ts title="src/pages/api/auth/signin.ts" -import type { APIRoute } from "astro"; -import { supabase } from "../../../lib/supabase"; - -export const POST: APIRoute = async ({ request, cookies, redirect }) => { - const formData = await request.formData(); - const email = formData.get("email")?.toString(); - const password = formData.get("password")?.toString(); - - if (!email || !password) { - return new Response("Email e password sono obbligatorie", { status: 400 }); - } - - const { data, error } = await supabase.auth.signInWithPassword({ - email, - password, - }); - - if (error) { - return new Response(error.message, { status: 500 }); - } - - const { access_token, refresh_token } = data.session; - cookies.set("sb-access-token", access_token, { - path: "/", - }); - cookies.set("sb-refresh-token", refresh_token, { - path: "/", - }); - return redirect("/dashboard"); -}; -``` - -`signout.ts` disconnette un utente. Accetta una richiesta `GET` e rimuove i token di accesso e aggiornamento dell'utente. - -```ts title="src/pages/api/auth/signout.ts" -import type { APIRoute } from "astro"; - -export const GET: APIRoute = async ({ cookies, redirect }) => { - cookies.delete("sb-access-token", { path: "/" }); - cookies.delete("sb-refresh-token", { path: "/" }); - return redirect("/signin"); -}; -``` - -### Creazione delle pagine di autenticazione - -Ora che hai creato i tuoi endpoint server, crea le pagine che li utilizzeranno. - -- `src/pages/register`: contiene un modulo per registrare un nuovo utente. -- `src/pages/signin`: contiene un modulo per accedere come utente. -- `src/pages/dashboard`: contiene una pagina accessibile solo agli utenti autenticati. - -Crea queste pagine nella directory `src/pages`. Il tuo progetto dovrebbe ora includere questi nuovi file: - - -- src/ - - lib/ - - supabase.ts - - pages/ - - api/ - - auth/ - - signin.ts - - signout.ts - - register.ts - - **register.astro** - - **signin.astro** - - **dashboard.astro** - - env.d.ts -- .env -- astro.config.mjs -- package.json - - -`register.astro` contiene un modulo per registrare un nuovo utente. Accetta un'email e una password e invia una richiesta `POST` a `/api/auth/register`. - -```astro title="src/pages/register.astro" ---- -import Layout from "../layouts/Layout.astro"; ---- - - -

Registrazione

-

Hai già un account? Accedi

-
- - - - - -
-
-``` - -`signin.astro` contiene un modulo per accedere come utente. Accetta un'email e una password e invia una richiesta `POST` a `/api/auth/signin`. Controlla anche la presenza dei token di accesso e aggiornamento. Se sono presenti, reindirizza alla dashboard. - -```astro title="src/pages/signin.astro" ---- -import Layout from "../layouts/Layout.astro"; - -const { cookies, redirect } = Astro; - -const accessToken = cookies.get("sb-access-token"); -const refreshToken = cookies.get("sb-refresh-token"); - -if (accessToken && refreshToken) { - return redirect("/dashboard"); -} ---- - - -

Accedi

-

Nuovo qui? Crea un account

-
- - - - - -
-
-``` - -`dashboard.astro` contiene una pagina accessibile solo agli utenti autenticati. Controlla la presenza dei token di accesso e aggiornamento. Se non sono presenti, reindirizza alla pagina di accesso. - -```astro title="src/pages/dashboard.astro" ---- -import Layout from "../layouts/Layout.astro"; -import { supabase } from "../lib/supabase"; - -const { cookies, redirect } = Astro; - -const accessToken = cookies.get("sb-access-token"); -const refreshToken = cookies.get("sb-refresh-token"); - -if (!accessToken || !refreshToken) { - return redirect("/signin"); -} - -const { data, error } = await supabase.auth.setSession({ - refresh_token: refreshToken.value, - access_token: accessToken.value, -}); - -if (error) { - cookies.delete("sb-access-token", { - path: "/", - }); - cookies.delete("sb-refresh-token", { - path: "/", - }); - - return redirect("/signin"); -} - -const email = data.user?.email; ---- - -

Benvenuto {email}

-

Siamo felici di vederti qui

-
- -
-
-``` - -### Aggiunta dell'autenticazione OAuth - -Per aggiungere l'autenticazione OAuth al tuo progetto, dovrai modificare il tuo client Supabase per abilitare il flusso di autenticazione con `"pkce"`. Puoi leggere di più sui flussi di autenticazione nella [documentazione di Supabase](https://supabase.com/docs/guides/auth/server-side-rendering#understanding-the-authentication-flow). - -```ts title="src/lib/supabase.ts" ins={6-10} -import { createClient } from "@supabase/supabase-js"; - -export const supabase = createClient( - import.meta.env.SUPABASE_URL, - import.meta.env.SUPABASE_ANON_KEY, - { - auth: { - flowType: "pkce", - }, - }, -); -``` - -Successivamente, nella dashboard di Supabase, abilita il provider OAuth che desideri utilizzare. Puoi trovare l'elenco dei provider supportati nella scheda **Authentication > Providers** del tuo progetto Supabase. - -L'esempio seguente utilizza GitHub come provider OAuth. Per connettere il tuo progetto a GitHub, segui i passaggi nella [documentazione di Supabase](https://supabase.com/docs/guides/auth/social-login/auth-github). - -Quindi, crea un nuovo endpoint server per gestire il callback OAuth in `src/pages/api/auth/callback.ts`. Questo endpoint verrà utilizzato per scambiare il codice OAuth con un token di accesso e aggiornamento. - -```ts title="src/pages/api/auth/callback.ts" -import type { APIRoute } from "astro"; -import { supabase } from "../../../lib/supabase"; - -export const GET: APIRoute = async ({ url, cookies, redirect }) => { - const authCode = url.searchParams.get("code"); - - if (!authCode) { - return new Response("Nessun codice fornito", { status: 400 }); - } - - const { data, error } = await supabase.auth.exchangeCodeForSession(authCode); - - if (error) { - return new Response(error.message, { status: 500 }); - } - - const { access_token, refresh_token } = data.session; - - cookies.set("sb-access-token", access_token, { - path: "/", - }); - cookies.set("sb-refresh-token", refresh_token, { - path: "/", - }); - - return redirect("/dashboard"); -}; -``` - -Successivamente, modifica la pagina di accesso per includere un nuovo pulsante per accedere con il provider OAuth. Questo pulsante dovrebbe inviare una richiesta `POST` a `/api/auth/signin` con il `provider` impostato sul nome del provider OAuth. - -```astro title="src/pages/signin.astro" ins={23} ---- -import Layout from "../layouts/Layout.astro"; - -const { cookies, redirect } = Astro; - -const accessToken = cookies.get("sb-access-token"); -const refreshToken = cookies.get("sb-refresh-token"); - -if (accessToken && refreshToken) { - return redirect("/dashboard"); -} ---- - - -

Accedi

-

Nuovo qui? Crea un account

-
- - - - - - -
-
-``` - -Infine, modifica l'endpoint server di accesso per gestire il provider OAuth. Se il `provider` è presente, reindirizzerà al provider OAuth. Altrimenti, accederà all'utente con l'email e la password. - -```ts title="src/pages/api/auth/signin.ts" ins={10-23} -import type { APIRoute } from "astro"; -import { supabase } from "../../../lib/supabase"; -import type { Provider } from "@supabase/supabase-js"; - -export const POST: APIRoute = async ({ request, cookies, redirect }) => { - const formData = await request.formData(); - const email = formData.get("email")?.toString(); - const password = formData.get("password")?.toString(); - const provider = formData.get("provider")?.toString(); - - const validProviders = ["google", "github", "discord"]; - - if (provider && validProviders.includes(provider)) { - const { data, error } = await supabase.auth.signInWithOAuth({ - provider: provider as Provider, - options: { - redirectTo: "http://localhost:4321/api/auth/callback" - }, - }); - - if (error) { - return new Response(error.message, { status: 500 }); - } - - return redirect(data.url); - } - - if (!email || !password) { - return new Response("Email e password sono obbligatorie", { status: 400 }); - } - - const { data, error } = await supabase.auth.signInWithPassword({ - email, - password, - }); - - if (error) { - return new Response(error.message, { status: 500 }); - } - - const { access_token, refresh_token } = data.session; - cookies.set("sb-access-token", access_token, { - path: "/", - }); - cookies.set("sb-refresh-token", refresh_token, { - path: "/", - }); - return redirect("/dashboard"); -}; -``` - -Dopo aver creato l'endpoint di callback OAuth e modificato la pagina e l'endpoint server di accesso, il tuo progetto dovrebbe avere la seguente struttura di file: - - -- src/ - - lib/ - - supabase.ts - - pages/ - - api/ - - auth/ - - signin.ts - - signout.ts - - register.ts - - callback.ts - - register.astro - - signin.astro - - dashboard.astro - - env.d.ts -- .env -- astro.config.mjs -- package.json - - -## Risorse della Comunità - -- [Entrare nello spirito delle feste con Astro, React e Supabase](https://www.aleksandra.codes/astro-supabase) -- [Demo di autenticazione con Astro e Supabase](https://github.com/kevinzunigacuellar/astro-supabase) diff --git a/src/content/docs/it/guides/backend/turso.mdx b/src/content/docs/it/guides/backend/turso.mdx deleted file mode 100644 index 5a6183e362657..0000000000000 --- a/src/content/docs/it/guides/backend/turso.mdx +++ /dev/null @@ -1,126 +0,0 @@ ---- -title: Turso & Astro -description: Costruisci in locale con un file SQLite e distribuisci globalmente con Turso. -type: backend -service: Turso -stub: false -i18nReady: true ---- -import PackageManagerTabs from '~/components/tabs/PackageManagerTabs.astro' - -[Turso](https://turso.tech) è un database basato su libSQL, una fork di SQLite. È ottimizzato per query a bassa latenza, rendendolo adatto ad applicazioni globali. - -## Inizializzare Turso in Astro - -### Prerequisiti - -- La [Turso CLI](https://docs.turso.tech/reference/turso-cli) installata, con accesso eseguito -- Un Database [Turso](https://turso.tech) con uno schema -- L'URL del tuo Database -- Un token di accesso - -### Configura le variabili di ambiente - -Ottieni l'URL del tuo database usando il comando seguente: - -```bash -turso db show --url -``` - -Crea un token di autorizzazione per il database: - -```bash -turso db tokens create -``` - -Aggiungi l'output dei due comandi nel tuo file `.env` nella cartella root del tuo progetto. Se il file non esiste, crealo. - -```ini title=".env" -TURSO_DATABASE_URL=libsql://... -TURSO_AUTH_TOKEN= -``` - -:::caution -Non usare il prefisso `PUBLIC_` quando crei queste [variabili d'ambiente](/it/guides/environment-variables/) private. Facendolo, esponi questi valori sul client. -::: - -### Installa il Client di LibSQL - -Installa la libreria `@libsql/client` per connettere Turso ad Astro: - - - - ```shell - npm install @libsql/client - ``` - - - ```shell - pnpm add @libsql/client - ``` - - - ```shell - yarn add @libsql/client - ``` - - - -### Inizializzare un nuovo client - -Crea un file `turso.ts` nella cartella `src` e richiama `createClient`, passando le variabili `TURSO_DATABASE_URL` e `TURSO_AUTH_TOKEN`: - -```ts title="src/turso.ts" -import { createClient } from "@libsql/client/web"; - -export const turso = createClient({ - url: import.meta.env.TURSO_DATABASE_URL, - authToken: import.meta.env.TURSO_AUTH_TOKEN, -}); -``` - -## Esegui query sul Database - -Per accedere delle informazioni sul tuo database, importa `turso` e [esegui una query SQL](https://docs.turso.tech/libsql/client-access/javascript-typescript-sdk#execute-a-single-statement) dentro qualunque compoennte `.astro`. - -L'esempio seguente ottiene tutti i `posts` dalla tua tabella, mostrando a schermo una lista di titoli in un componente ``: - -```astro title="src/components/BlogIndex.astro" ---- -import { turso } from '../turso' - -const { rows } = await turso.execute('SELECT * FROM posts') ---- - -
    - {rows.map((post) => ( -
  • {post.title}
  • - ))} -
-``` - -### Placeholders SQL - -Il metodo `execute()` può prendere [un oggetto per passare variaibli alla dichiariazione SQL](https://docs.turso.tech/libsql/client-access/javascript-typescript-sdk#positional-placeholders), come uno `slug`, o un'impaginazione. - -L'esempio seguente ottiene un valore singolo dalla tabella `posts` `WHERE` lo `slug` è un valore ottenuto da `Astro.params`, a questo punto mostra a schermo il titolo del post. - -```astro title="src/pages/index.astro" ---- -import { turso } from '../turso' - -const { slug } = Astro.params - -const { rows } = await turso.execute({ - sql: 'SELECT * FROM posts WHERE slug = ?', - args: [slug!] -}) ---- - -

{rows[0].title}

-``` - -## Risorse per Turso -- [Documentazione di Turso](https://docs.turso.tech) -- [Turso su GitHub](https://github.com/tursodatabase) -- [Utilizzo di Turso per servire il contenuto di un blog Astro renderizzato lato server](https://blog.turso.tech/using-turso-to-serve-a-server-side-rendered-astro-blogs-content-58caa6188bd5) diff --git a/src/content/docs/it/guides/backend/xata.mdx b/src/content/docs/it/guides/backend/xata.mdx deleted file mode 100644 index 4954a9bc33955..0000000000000 --- a/src/content/docs/it/guides/backend/xata.mdx +++ /dev/null @@ -1,110 +0,0 @@ ---- -title: Xata & Astro -description: Aggiungi un database serverless con ricerca full-text al tuo progetto con Xata -type: backend -service: Xata -stub: false -i18nReady: true ---- -import PackageManagerTabs from '~/components/tabs/PackageManagerTabs.astro' -import { FileTree } from '@astrojs/starlight/components'; - - -[Xata](https://xata.io) è una **Piattaforma dati serverless** che combina le funzionalità di un database relazionale, un motore di ricerca e un motore di analisi, e li rende utilizzabili attraverso una singola REST API. - -## Aggiunta di un database con Xata - -### Prerequisiti - -- Un account [Xata](https://app.xata.io/signin) con un database. (Puoi utilizzare il database di esempio dall'interfaccia utente.) -- Un Token di Accesso (`XATA_TOKEN_API`). -- L'URL del tuo Database. - -Dopo aver aggiornato e inizializzato la [Xata CLI](https://xata.io/docs/getting-started/installation), avrai il tuo token per l'API nel file `.env` e l'URL del database. - -Alla fine della configurazione, dovresti avere: - -```ini title=".env" -XATA_API_KEY=hash_key - -# Branch Xata che verrà utilizzato -# se non esiste un branch xata con -# lo stesso nome del tuo branch git -XATA_BRANCH=main -``` - -E l'URL del database: - -```ini title=".xatarc" -{ - "databaseUrl": "https://il-tuo-url-del-database" -} -``` - -### Configurazione dell'ambiente - -Per avere IntelliSense e dei tipi per le tue variabili d'ambiente, modifica o crea il file `env.d.ts` nella tua cartella `src/`: - -```ts title="src/env.d.ts" -interface ImportMetaEnv { - readonly XATA_API_KEY: string; - readonly XATA_BRANCH?: string; -} - -interface ImportMeta { - readonly env: ImportMetaEnv; -} -``` - -:::tip -Per ulteriori informazioni sulle [variabili d'ambiente](/it/guides/environment-variables/) e sui file `.env` in Astro, leggi questa guida. -::: - -Utilizzando la Xata CLI per generare il codice di base e scegliendo l'opzione TypeScript, sarà generata un'istanza del SDK per te, con i tipi adattati allo schema del tuo database. Inoltre, `@xata.io/client` sarà aggiunto al tuo `package.json`. - -Le tue variabili d'ambiente Xata e l'URL del database sono stati automaticamente acquisiti dall'istanza del SDK, quindi non è necessario alcun altro lavoro di configurazione. - -Ora, il tuo progetto dovrebbe avere la seguente struttura: - - -- src/ - - **xata.ts** - - **env.d.ts** -- **.env** -- astro.config.mjs -- package.json -- **.xatarc** - - -## Creazione delle tue query - -Per ottenere i tuoi post, importa e utilizza `getXataClient()` in un file `.astro`. L'esempio seguente prende i primi 50 post dal Sample Blog Database di Xata. - -```astro title="src/pages/blog/index.astro" ---- -import { XataClient } from '../../xata'; - -const xata = new XataClient({ - apiKey: import.meta.env.XATA_API_KEY, - branch: import.meta.env.XATA_BRANCH -}); - -const { records } = await xata.db.Posts.getPaginated({ - pagination: { - size: 50 - } -}) ---- - -
    - {records.map((post) => ( -
  • {post.title}
  • - ))} -
-``` -È importante notare che l'SDK deve essere rigenerato ogni volta che lo schema viene modificato. Pertanto, evita di apportare modifiche ai file generati/dalla Xata CLI, perché una volta che lo schema viene aggiornato, le tue modifiche saranno sovrascritte. - - -## Risorse Ufficiali -- [Xata Astro Starter](https://github.com/xataio/examples/tree/main/apps/getting-started-astro) -- [Xata Docs: Quick Start Guide](https://xata.io/docs/getting-started/quickstart-astro) diff --git a/src/content/docs/it/guides/configuring-astro.mdx b/src/content/docs/it/guides/configuring-astro.mdx deleted file mode 100644 index 9f0a78c9cfa94..0000000000000 --- a/src/content/docs/it/guides/configuring-astro.mdx +++ /dev/null @@ -1,170 +0,0 @@ ---- -title: Configurare Astro -i18nReady: true ---- -import ReadMore from '~/components/ReadMore.astro' - -Puoi modificare come astro lavora modificando il file `astro.config.mjs` nel tuo progetto. Questo file è molto comune nei progetti astro - -Puoi leggere la [referenze dell'API](/it/reference/configuration-reference/) per vedere tutte le opzioni di configurazione possibili. - -## Il file di configurazione di Astro - -Una configurazione di Astro viene esportata con l'export default e viene usata la funzione `defineConfig` per rendere tutto piu semplice: - -```js -// astro.config.mjs -import { defineConfig } from 'astro/config' - -export default defineConfig({ - // la tua configurazione va qui - // https://docs.astro.build/it/reference/configuration-reference/ -}) -``` - -Usare `defineConfig()` è raccomandato per avere degli hint nel tuo IDE, ma non è necessario. Puoi creare una configurazione vailida anche in questo modo: - -```js title="astro.config.mjs" -// Esempio: Configurazione di base scheletrica -export default {} -``` - -## Tipi di file configurazione supportati - -Astro supporta molti tipi di file per scrivere la tua configurazione: `astro.config.js`, `astro.config.mjs`, `astro.config.cjs` e `astro.config.ts`. Noi ti consigliamo di usere `.mjs` oppure `.ts` se vuoi scrivere la configurazione in TypeScript. - -Il caricamento dei file di configurazione di TypeScript è gestito tramite [`tsm`](https://github.com/lukeed/tsm) e rispetterà le opzioni tsconfig del progetto. -## Risoluzione del file di configurazione - -Astro in automatico trovera e utilizzare il file `astro.config.mjs` dentro la root del tuo progetto. Se non verra trovato utilizzare la configurazione di base. - -```bash -# Esempio: Leggera il file ./astro.config.mjs -astro build -``` - -Puoi indicare che file di configurazione utilizzare con la flag `--config` nella CLI. Questa flag comunque cercera il file indicato nella root del progetto - -```bash -# Esempio: Legge il tuo file di configurazione -astro build --config my-config-file.js -``` - -## IntelliSense nella configurazione - -Astro raccomanda di usare la funzione `defineConfig()` per aiutarti. `defineConfig()` ti da IntelliSense in modo automatico nel tuo IDE. Editor come VSCode leggono le definizioni TypeScript di Astro e ti daranno IntelliSense automatica, pure se il tuo file non è scrito in TypeScript. - -```js -// astro.config.mjs -import { defineConfig } from 'astro/config' - -export default defineConfig({ - // configurazione qui... - // https://docs.astro.build/it/reference/configuration-reference/ -}) -``` - -Puoi anche definire i tipi utilizzando JSDoc: - -```js -// astro.config.mjs -export default /** @type {import('astro').AstroUserConfig} */ { - // configurazione qui... - // https://docs.astro.build/it/reference/configuration-reference/ -} -``` - -## Riferimento ai file relativi - -Se definisci una path relativa in `root` oppure con la flag `--root` della CLI, Astro lo troverà rispetto alla cartella del progetto dove puoi avviare il comando `astro`. - -```js -// astro.config.mjs -import { defineConfig } from 'astro/config' - -export default defineConfig({ - // Trova la cartella "./foo" nella tua cartella attuale - root: 'foo' -}) -``` - -Astro risolverà tutte le altre stringhe di file e le cartella relative come relative alla radice del progetto: - -```js -// astro.config.mjs -import { defineConfig } from 'astro/config' - -export default defineConfig({ - // Trova la cartella "./foo" nella tua cartella di lavoro - root: 'foo', - // Trova la cartella "./foo/public" nella tua cartella di lavoro - publicDir: 'public', -}) -``` - -Per fare riferimento a un file o a una cartella relativa al file di configurazione, usa `import.meta.url` (a meno che tu non stia usando un file common.js `astro.config.cjs`). - -```js "import.meta.url" -// astro.config.mjs -import { defineConfig } from 'astro/config' - -export default defineConfig({ - // Trova la cartella "./foo", relativa al file di configurazione - root: new URL("./foo", import.meta.url).toString(), - // Trova la cartella "./public", relativa al file di configurazione - publicDir: new URL("./public", import.meta.url).toString(), -}) -``` - -:::note -Le proprieta del `import.meta` specifiche per Vite, come `import.meta.env` o `import.meta.glob`, _non_ accessibili dal tuo file di configurazione. Ti consigliamo di usare alternative come [dotenv](https://github.com/motdotla/dotenv) o [fast-glob](https://github.com/mrmlnc/fast-glob) per il rispettivo utilizzo. Inoltre, gli [alias dei path tsconfig](https://www.typescriptlang.org/tsconfig#paths) non verranno risolti. Utilizza percorsi relativi per gli import dei moduli in questo file. -::: - -## Cambiare il nome dei file di output - -Per il codice che Astro processa automaticamente, comne il JavaScript o CSS importato, puoi cambiare il loro noem con l'opzione [`entryFileNames`](https://rollupjs.org/configuration-options/#output-entryfilenames), [`chunkFileNames`](https://rollupjs.org/configuration-options/#output-chunkfilenames), e [`assetFileNames`](https://rollupjs.org/configuration-options/#output-assetfilenames) in `vite.build.rollupOptions` nel tuo file `astro.config.*`. - -```js ins={9-11} -// astro.config.mjs -import { defineConfig } from 'astro/config' - -export default defineConfig({ - vite: { - build: { - rollupOptions: { - output: { - entryFileNames: 'entry.[hash].mjs', - chunkFileNames: 'chunks/chunk.[hash].mjs', - assetFileNames: 'assets/asset.[hash][extname]', - }, - }, - }, - }, -}) -``` - -Questa funzione può essere utile per cambiare il nome a file che possono essere bloccati dagli ad blocker (es. `ads.js` o `google-tag-manager.js`). - -## Variabili d'ambiente -Astro controlla i file di configurazione prima di caricare gli altri file. Per questo motivo, non si può usare `import.meta.env` per accedere alle variabili d'ambiente impostate nei file `.env`. - -Puoi usare `process.env` nel file di configurazione per utilizzare le variabili d'ambiente, come questo [inserite dalla CLI](/it/guides/environment-variables/#using-the-cli). - -Puoi pure usare il [`loadEnv` di Vite](https://main.vite.dev/config/#using-environment-variables-in-config) per caricare i file `.env`. - -:::note -`pnpm` non consente di importare moduli che non sono direttamente installati nel progetto. Se usi `pnpm`, è necessario installare `vite` per usare l'helper `loadEnv`. - -```sh -pnpm add vite --save-dev -``` -::: - -```js title="astro.config.mjs" -import { loadEnv } from "vite"; -const { SECRET_PASSWORD } = loadEnv(process.env.NODE_ENV, process.cwd(), ""); -``` - -## Referenze - -Scopri di più sulla [API di configurazione](/it/reference/configuration-reference/) per una panoramica completa di tutte le opzioni di configurazione supportate. diff --git a/src/content/docs/it/guides/deploy/cloudflare.mdx b/src/content/docs/it/guides/deploy/cloudflare.mdx deleted file mode 100644 index 056335d6487b3..0000000000000 --- a/src/content/docs/it/guides/deploy/cloudflare.mdx +++ /dev/null @@ -1,140 +0,0 @@ ---- -title: Effettua il deploy del tuo sito Astro su Cloudflare Pages -description: Come effettuare il deploy del tuo sito Astro sul web usando Cloudflare Pages. -type: deploy -i18nReady: true ---- -import ReadMore from '~/components/ReadMore.astro'; -import { Steps } from '@astrojs/starlight/components'; - -Puoi effettuare il deploy del tuo progetto Astro su [Cloudflare Pages](https://pages.cloudflare.com/), una piattaforma per sviluppatori frontend che consente di collaborare e pubblicare siti web statici (JAMstack) e SSR. - -Questa guida include: - -- [Come effettuare il deploy tramite il Pannello di controllo di Cloudflare Pages](#come-effettuare-il-deploy-di-un-sito-utilizzando-git) -- [Come effettuare il deploy utilizzando Wrangler, la CLI di Cloudflare](#come-effettuare-il-deploy-di-un-sito-utilizzando-wrangler) -- [Come effettuare il deploy di un sito SSR utilizzando `@astrojs/cloudflare`](#come-effettuare-il-deploy-di-un-sito-ssr) - -## Prerequisiti - -Per iniziare, avrai bisogno di: - -- Un account su Cloudflare. Se non ne hai già uno, puoi crearne uno gratuitamente durante il processo. -- Il codice della tua app caricato su un repository [GitHub](https://github.com/) o [GitLab](https://about.gitlab.com/). - -## Come effettuare il deploy di un sito utilizzando Git - - -1. Configura un nuovo progetto su Cloudflare Pages. - -2. Esegui il push del tuo codice nel tuo repository Git (GitHub, GitLab). - -3. Accedi al pannello di controllo di Cloudflare e seleziona il tuo account in **Account Home** > **Pages**. - -4. Clicca su **Crea applicazione** e dopo sull'opzione **Esegui la connessione a Git**. - -5. Seleziona il progetto git che desideri pubblicare e clicca su **Inizia configurazione**. - -6. Utilizza le seguenti impostazioni per la build: - - - **Framework preimpostato**: `Astro` - - **Comando di build**: `npm run build` - - **Directory di output della build**: `dist` - -7. Clicca il pulsante **Salva e Distribuisci**. - - -## Come effettuare il deploy di un sito utilizzando Wrangler - - -1. Installa [Wrangler](https://developers.cloudflare.com/workers/wrangler/get-started/). - -2. Esegui il login con il tuo account Cloudflare utilizzando il comando `wrangler login`. - -3. Esegui il comando per avviare la build. - -4. Effettua il deploy utilizzando il comando `npx wrangler pages publish dist`. - - -```bash -# Installa Wrangler CLI -npm install -g wrangler -# Accedi all'account Cloudflare da CLI -wrangler login -# Esegui il comando di build -npm run build -# Crea una nuova distribuzione -npx wrangler pages deploy dist -``` - -Dopo aver caricato i file del tuo progetto, Wrangler ti fornirà un URL per visualizzare l'anteprima del tuo sito in anteprima. Quando accedi al pannello di controllo di Cloudflare Pages, vedrai il tuo nuovo progetto. - -### Abilitazione dell'anteprima in locale con Wrangler - -Per far funzionare l'anteprima, è necessario installare `wrangler` - -```bash -pnpm add wrangler --save-dev -``` - -A questo punto è possibile aggiornare lo script di preview in modo da utilizzare wrangler, invece del comando di anteprima della CLI di Astro. - -```json title="package.json" -"preview": "wrangler pages dev ./dist" -``` - -## Come effettuare il deploy di un sito SSR - -Puoi creare un sito Astro SSR e eseguire il deploy su Cloudflare Pages utilizzando l'adapter [`@astrojs/cloudflare`](/it/guides/integrations-guide/cloudflare/). - -Segui i passaggi qui sotto per configurare l'adapter. Successivamente, puoi effettuare il deploy del tuo sito utilizzando uno dei metodi visti in precedenza. - -### Installazione rapida - -Aggiungi l'adapter di Cloudflare per abilitare l'SSR nel tuo progetto Astro utilizzando il seguente comando: `astro add`. Questo installerà l'adapter e apporterà le modifiche appropriate al tuo file `astro.config.mjs` in un solo passaggio. - -```bash -npx astro add cloudflare -``` - -### Installazione manuale - -Se preferisci installare manualmente l'adattatore, segui questi due passaggi: - - -1. Aggiungi l'adattatore `@astrojs/cloudflare` alle dipendenze del tuo progetto utilizzando il tuo package manager preferito. Se stai utilizzando npm o non sei sicuro di quale tu stia utilizzando, esegui questo comando nel terminale: - - ```bash - npm install @astrojs/cloudflare - ``` - -2. Aggiungi questi parametri al tuo `astro.config.mjs`: - - ```js title="astro.config.mjs" ins={2, 5-6} - import { defineConfig } from 'astro/config'; - import cloudflare from '@astrojs/cloudflare'; - - export default defineConfig({ - output: 'server', - adapter: cloudflare() - }); - ``` - - -Leggi di più su [SSR in Astro](/it/guides/on-demand-rendering/). - -## Risoluzione dei problemi - -### Idratazione lato client - -L'idratazione lato client potrebbe fallire a causa dell'impostazione Auto Minify di Cloudflare. Se vedi `Hydration completed but contains mismatches` nella console, assicurati di disabilitare Auto Minify nelle impostazioni di Cloudflare. - -### API di runtime Node.js - -Se stai costruendo un progetto che utilizza il rendering on-demand con [l'adattatore SSR di Cloudflare](/it/guides/integrations-guide/cloudflare/) e il server non riesce a compilare con un messaggio di errore come `[Error] Could not resolve "XXXX. The package "XXXX" wasn't found on the file system but is built into node.`: - -- Questo significa che un pacchetto o un'importazione che stai utilizzando nell'ambiente lato server non è compatibile con le [API di runtime di Cloudflare](https://developers.cloudflare.com/workers/runtime-apis/nodejs/). - -- Se stai importando direttamente un'API di runtime Node.js, consulta la documentazione di Astro sulla [compatibilità Node.js](/it/guides/integrations-guide/cloudflare/#nodejs-compatibility) di Cloudflare per ulteriori passaggi su come risolvere questo problema. - -- Se stai importando un pacchetto che importa un'API di runtime Node.js, verifica con l'autore del pacchetto se supporta la sintassi di importazione `node:*`. Se non lo fanno, potresti dover trovare un pacchetto alternativo. diff --git a/src/content/docs/it/guides/deploy/deno.mdx b/src/content/docs/it/guides/deploy/deno.mdx deleted file mode 100644 index 0076778a2143a..0000000000000 --- a/src/content/docs/it/guides/deploy/deno.mdx +++ /dev/null @@ -1,179 +0,0 @@ ---- -title: Esegui il Deploy del tuo sito su Deno Deploy -description: Come fare il deploy del tuo sito in Astro sul web usando deno. -type: deploy -i18nReady: true ---- -import ReadMore from '~/components/ReadMore.astro' - -Puoi effettuare il deploy di un sito Astro con rendering lato server su [Deno Deploy](https://deno.com/deploy), un sistema che esegue JavaScript, TypeScript e WebAssembly attraverso l'edge, in tutto il mondo. - -Questa guida include istruzioni per fare il deploy attraverso Deno Deploy utilizzando le GitHub Actions o la Deno Deploy CLI. - -## Requisiti - -Avere [Deno](https://deno.com/) installato sul tuo sistema. - -## Configurazione Del Progetto - -Puoi fare il deploy del tuo sito Astro su [Deno Deploy](https://deno.com/deploy) utilizzando il server-side-rendering (SSR). - -Per fare il deploy di un sito statico, segui la [guida sul sito di Deno](https://docs.deno.com/deploy/tutorials/static-site) - -### Adapter per il SSR - -Per abilitare il server-side-rendering nel tuo progetto astro e eseguire il deploy su Deno Deploy: - -Aggiungi [il Deno adapter][Deno adapter] per abilitare il server-side-rendering nel tuo sito usa il comando `astro add`. Installera l'adapter e inserira i cambiamenti necessari per il `astro.config.mjs` in un solo step. - -```bash -npx astro add deno -``` - -Se vuoi installare l'adapter manualmente segui i seguienti passaggi: - -1. Installa [l'adapter `@deno/astro-adapter`][Deno adapter] nel tuo progetto come dipendenza utilizzando il tuo package manager preferito. Se stai usando npm o non lo sai avvia questo comando nel terminale: - - ```bash - npm install @deno/astro-adapter - ``` - -1. Modifica il tuo file `astro.config.mjs` con le modifiche sottostanti. - - ```js ins={3,6-7} - // astro.config.mjs - import { defineConfig } from 'astro/config'; - import deno from '@deno/astro-adapter'; - - export default defineConfig({ - output: 'server', - adapter: deno(), - }); - ``` - - Ora, Cambia lo script `preview` nel tuo `package.json` con i cambiamenti sottostanti. - - ```json del={8} ins={9} - // package.json - { - // ... - "scripts": { - "dev": "astro dev", - "start": "astro dev", - "build": "astro build", - "preview": "astro preview" - "preview": "deno run --allow-net --allow-read --allow-env ./dist/server/entry.mjs" - } - } - ``` - - Ora puoi usare questo comando per vedere l'anteprima del tuo sito con Deno. - - ```bash - npm run preview - ``` - -## Come fare il deploy - -Puoi fare il deploy su Deno Deploy attraverso le GitHub Actions o usando lad CLI Deno Deploy. - -### Deploy con le GitHub Actions - -Se il tuo progetto si trova su GitHub, il sito di [Deno Deploy](https://dash.deno.com/) ti guidera nel setup del deploy con le GitHub Actions. - -1. Fai il push del tuo codice su una repository GitHub. - -1. Esegui il login su [Deno Deploy](https://dash.deno.com/) con il tuo account GitHub, e clicca [New Project](https://dash.deno.com). - -1. Seleziona la tua repository, e il branch di cui vuoi fare il deploy, e seleziona **GitHub Action**. (Il tuo sito Astro richiede degli setup di build custom, non puoi usare quelli automatici) - -1. Nel tuo progetto Astro, crea un nuovo file `.github/workflows/deploy.yml` e incollaci il codice YAMl sottostante. È molto simile a il codice YAML che ti dara Deno Deploy, ma con alcuni step aggiuntivi. - - ```yaml - name: Deploy - on: [push] - - jobs: - deploy: - name: Deploy - runs-on: ubuntu-latest - permissions: - id-token: write # Necessario per l'auth con Deno Deploy - contents: read # Necessario per scaricare la repository - - steps: - - name: Clone repository - uses: actions/checkout@v4 - - # No usi npm? Cambia `npm ci` con `yarn install` o `pnpm i` - - name: Install dependencies - run: npm ci - - # No usi npm? Cambia `npm run build` con `yarn build` o `pnpm run build` - - name: Build Astro - run: npm run build - - - name: Upload to Deno Deploy - uses: denoland/deployctl@v1 - with: - project: my-deno-project # TODO: rimpiazzalo con il nome del tuo progetto Deno Deploy - entrypoint: server/entry.mjs - root: dist - ``` - -1. Dopo aver fatto il commit di questo file YAML, e il push su GitHub sul branch configurato per il deploy in precedenza, il deploy dovrebbe essere automatico! - - Poi seguire l'avanzamento del deploy nella sezione "Actions" sulla repository GitHub, o su [Deno Deploy](https://dash.deno.com). - - -### Deploy con la CLI - -1. Installa la [CLI di Deno Deploy](https://docs.deno.com/deploy/manual/deployctl). - - ```bash - deno install --allow-read --allow-write --allow-env --allow-net --allow-run --no-check -r -f https://deno.land/x/deploy/deployctl.ts - ``` - -1. Esegui la build del tuo progetto Astro. - - ```bash - npm run build - ``` - -1. Esegui `deployctl` per eseguire deploy! - - Nel comando qui sotto rimpiazza `` con il tuo [Personal Access Token](https://dash.deno.com/account#access-tokens) e `` con il nome del tuo progetto Deno Deploy. - - ```bash - DENO_DEPLOY_TOKEN= deployctl deploy --project= --no-static --include=./dist ./dist/server/entry.mjs - ``` - - Puoi vedere tutti i tuoi deploy su [Deno Deploy](https://dash.deno.com). - -1. (Opzionale) Per semplificare questo processo per eseguire il deploy, aggiungi uno script `deploy-deno` nel tuo `package.json`. - - ```json ins={9} - // package.json - { - // ... - "scripts": { - "dev": "astro dev", - "start": "astro dev", - "build": "astro build", - "preview": "deno run --allow-net --allow-read --allow-env ./dist/server/entry.mjs", - "deno-deploy": "npm run build && deployctl deploy --project= --no-static --include=./dist ./dist/server/entry.mjs" - } - } - ``` - - Da ora in poi potrai usare questo comando per fare il deploy del tuo sito. - - ```bash - DENO_DEPLOY_TOKEN= npm run deno-deploy - ``` - - -Scopri di più sul [SSR in Astro](/it/guides/on-demand-rendering/). - - -[Deno adapter]: https://github.com/denoland/deno-astro-adapter diff --git a/src/content/docs/it/guides/deploy/zerops.mdx b/src/content/docs/it/guides/deploy/zerops.mdx deleted file mode 100644 index a6d8962720f85..0000000000000 --- a/src/content/docs/it/guides/deploy/zerops.mdx +++ /dev/null @@ -1,164 +0,0 @@ ---- -title: Effettua il deploy del tuo sito Astro su Zerops -description: Come effettuare il deploy del tuo sito Astro usando Zerops. -type: deploy -i18nReady: true ---- -import PackageManagerTabs from '~/components/tabs/PackageManagerTabs.astro' -import { Steps } from '@astrojs/starlight/components'; - -[Zerops](https://zerops.io/) è una piattaforma cloud oriantata agli sviluppatori che può essere usata per eseguire il deploy del tuo sito SSR Astro. - -Questa guida ti accompagnerà nel processo di deployment di un sito Astro su Zerops utilizzando l'adattatore specifico per Node.js. - -## Prerequisiti - -- **Un progetto Astro che usa [l'adattatore `@astrojs/node` per il SSR](/it/guides/integrations-guide/node/)** -- **Un account Zerops** - Se non ne hai già uno, puoi [creare il tuo account Zerops](https://zerops.io/) gratuitamente. - -:::tip[Iniziamo da un template] -Il [Zerops per Astro - esempio per Node.js](https://github.com/zeropsio/recipe-astro-nodejs) può essere importato direttamente nella tua [Dashboard di Zerops](https://app.zerops.io/dashboard/projects), e distribuito con un clic! - -```yaml -project: - name: astro -services: - - hostname: astronode - type: nodejs@20 - buildFromGit: https://github.com/zeropsio/recipe-astro-nodejs - ports: - - port: 4321 - httpSupport: true - enableSubdomainAccess: true - minContainers: 1 -``` -::: - -## Creare un progetto Zerops con Node.js - -Puoi creare un servizio Node.js per il tuo sito Astro attraverso il [Zerops `project add` wizard](https://app.zerops.io/dashboard/project-add), o importando un sito Astro usando il `.yaml`. - -La struttura dello YAML sottostante servirà per creare un progetto chiamato `my-astro-sites` con Node.js v20 con l'hostname `hellothere`. Un progetto Zerops può contenere più siti Astro. - -```yaml -project: - name: my-astro-sites -services: - - hostname: hellothere - type: nodejs@20 - ports: - - port: 4321 - httpSupport: true - minContainers: 1 -``` - - -## Creare e distribuire la tua app su Zerops - -Ora che abbiamo creato un servizio Node.js su Zerops, ti servirà creare il file `zerops.yml` nella directory principale del tuo progetto in modo da far avviare il processo di build e deploy alla pipeline di Zerops. - -L'esempio sottostante mostra una configurazione che richiede alcune operazioni per il progetto example con l'hostname `hellothere`: - - - - ```yaml title="zerops.yml" - zerops: - - setup: hellothere - build: - base: nodejs@20 - buildCommands: - - npm i - - npm run build - deploy: - - dist - - package.json - - node_modules - cache: - - node_modules - - package-lock.json - run: - start: node dist/server/entry.mjs - envVariables: - HOST: 0.0.0.0 - NODE_ENV: production - ``` - - - ```yaml title="zerops.yml" - zerops: - - setup: hellothere - build: - base: nodejs@20 - buildCommands: - - pnpm i - - pnpm run build - deploy: - - dist - - package.json - - node_modules - cache: - - node_modules - - pnpm-lock.yaml - run: - start: node dist/server/entry.mjs - envVariables: - HOST: 0.0.0.0 - NODE_ENV: production - ``` - - - ```yaml title="zerops.yml" - zerops: - - setup: astronode - build: - base: nodejs@20 - buildCommands: - - yarn - - yarn build - deploy: - - dist - - package.json - - node_modules - cache: - - node_modules - - yarn.lock - run: - start: node dist/server/entry.mjs - envVariables: - HOST: 0.0.0.0 - NODE_ENV: production - ``` - - - -### Attivare il processo di build e deploy usando GitHub / GitLab -Per configurare il processo di build e deploy quando si fa un push a un branch o si crea una nuova release, vai al tuo servizio di Node.js e connetti il servizio di Zerops a una repository GitHub o GitLab. - - -### Attivare il processo di build e deploy usando la CLI di Zerops (zcli) - - -1. Installa la CLI di Zerops. - ```shell - # Per scaricare il binario zcli direttamente, - # usa https://github.com/zeropsio/zcli/releases - npm i -g @zerops/zcli - ``` - -2. Vai su [`Settings > Access Token Management`](https://app.zerops.io/settings/token-management) nell'app di Zerops e genera un nuovo token per accedere. - -3. Effetua il login usando il tuo access token usando il comando seguente: - ```shell - zcli login - ``` - -4. Vai alla directory principale del tuo progetto (dove si trova il `zerops.yml`) e avvia il seguente comando per iniziare il deploy: - ```shell - zcli push - ``` - - -## Risorse - -- [Deploy di un sito Astro su Zerops in 3 minuti](https://medium.com/@arjunaditya/how-to-deploy-astro-to-zerops-4230816a62b4) -- [Guida dettagliata su come creare un servizio Node.js su Zerops](https://docs.zerops.io/nodejs/how-to/create) diff --git a/src/content/docs/it/guides/endpoints.mdx b/src/content/docs/it/guides/endpoints.mdx deleted file mode 100644 index 60f1ac8b9846f..0000000000000 --- a/src/content/docs/it/guides/endpoints.mdx +++ /dev/null @@ -1,223 +0,0 @@ ---- -title: Endpoint -description: Scopri come creare endpoint che servono qualsiasi tipo di dati -i18nReady: true ---- -import RecipeLinks from "~/components/RecipeLinks.astro"; - -Astro ti consente di creare endpoint personalizzati per servire qualsiasi tipo di dati. Puoi utilizzarlo per generare immagini, esporre un documento RSS o utilizzarli come percorsi API per creare un'API completa per il tuo sito. - -Nei siti generati staticamente, gli endpoint personalizzati vengono chiamati in fase di compilazione per produrre file statici. Se attivi la modalità [SSR](/it/guides/on-demand-rendering/), gli endpoint personalizzati si trasformano in endpoint server live che vengono chiamati su richiesta. Gli endpoint statici e SSR sono definiti in modo simile, ma gli endpoint SSR supportano funzionalità aggiuntive. - -## Endpoint file statici - -Per creare un endpoint personalizzato, aggiungi un file `.js` o `.ts` alla directory `/pages`. L'estensione `.js` o `.ts` verrà rimossa durante il processo di creazione, quindi il nome del file dovrebbe includere l'estensione dei dati che desideri creare. Ad esempio, `src/pages/data.json.ts` creerà un endpoint `/data.json`. - -Gli endpoint esportano una funzione `GET` (facoltativamente `async`) che riceve un [oggetto contesto](/it/reference/api-reference/) con proprietà simili al globale `Astro`. Qui restituisce un oggetto Response con un `nome` e un `url` e Astro lo chiamerà in fase di compilazione e utilizzerà il contenuto del corpo per generare il file. - -```ts -// Example: src/pages/builtwith.json.ts -// Outputs: /builtwith.json -export async function GET({params, request}) { - return new Response( - JSON.stringify({ - name: 'Astro', - url: 'https://astro.build/' - }) - ) -} -``` - -A partire da Astro v3.0, l'oggetto `Response` restituito non deve più includere la proprietà `encoding`. Ad esempio, per produrre un'immagine png binaria: - -```ts title="src/pages/astro-logo.png.ts" {3} -export async function GET({ params, request }) { - const response = await fetch("https://docs.astro.build/assets/full-logo-light.png"); - return new Response(await response.arrayBuffer()); -} -``` - -Puoi anche aggiungere i tipi per le funzioni dell'endpoint utilizzando il tipo `APIRoute`: - -```ts -import type { APIRoute } from 'astro'; - -export const GET: APIRoute = async ({ params, request }) => {...} -``` - -### `params` e routing dinamico - -Gli endpoint supportano le stesse funzionalità di [routing dinamico](/it/guides/routing/#percorsi-dinamici) delle pagine. Assegna un nome al file con un nome di parametro tra parentesi ed esporta una [funzione `getStaticPaths()`](/it/reference/routing-reference/#getstaticpaths). Quindi, puoi accedere al parametro utilizzando la proprietà `params` passata alla funzione endpoint: - -```ts title="src/pages/api/[id].json.ts" -import type { APIRoute } from 'astro'; - -const usernames = ["Sarah", "Chris", "Yan", "Elian"] - -export const GET: APIRoute = ({ params, request }) => { - const id = params.id; - return new Response( - JSON.stringify({ - name: usernames[id] - }) - ) -} - -export function getStaticPaths() { - return [ - { params: { id: "0"} }, - { params: { id: "1"} }, - { params: { id: "2"} }, - { params: { id: "3"} } - ] -} -``` - -Ciò genererà quattro endpoint JSON in fase di compilazione: `/api/0.json`, `/api/1.json`, `/api/2.json` e `/api/3.json`. Il routing dinamico con gli endpoint funziona allo stesso modo delle pagine, ma poiché l'endpoint è una funzione e non un componente, le [proprietà](/it/reference/routing-reference/#data-passing-with-props) non sono supportate. - -### `request` - -Tutti gli endpoint ricevono una proprietà `request`, ma in modalità statica hai accesso solo a `request.url`. Restituisce l´URL completo dell'endpoint corrente e funziona allo stesso modo di [Astro.request.url](/it/reference/api-reference/#request) per le pagine. - -```ts title="src/pages/request-path.json.ts" -import type { APIRoute } from 'astro'; - -export const GET: APIRoute = ({ params, request }) => { - return new Response(JSON.stringify({ - path: new URL(request.url).pathname - }) - ) -} -``` - -## Endpoint server (percorsi API) - -Tutto quanto descritto nella sezione endpoint file statici può essere utilizzato anche in modalità SSR: i file possono esportare una funzione `GET` che riceve un [oggetto contesto](/it/reference/api-reference/) con proprietà simili a l´`Astro` globale. - -Ma, a differenza della modalità `static`, quando configuri la modalità `server`, gli endpoint verranno creati quando verranno richiesti. Ciò sblocca nuove funzionalità che non sono disponibili in fase di creazione e ti consente di creare percorsi API che ascoltano le richieste ed eseguono in modo sicuro il codice sul server in fase di esecuzione. - - - -:::note -Assicurati di [abilitare SSR](/it/guides/on-demand-rendering/) prima di provare questi esempi. -::: - -Gli endpoint server possono accedere a `params` senza esportare `getStaticPaths` e possono restituire un oggetto [`Response`](https://developer.mozilla.org/en-US/docs/Web/API/Response), consentendoti per impostare codici di stato e intestazioni: - -```js title="src/pages/[id].json.js" -import { getProduct } from '../db'; - -export async function GET({ params }) { - const id = params.id; - const product = await getProduct(id); - - if (!product) { - return new Response(null, { - status: 404, - statusText: 'Not found' - }); - } - - return new Response( - JSON.stringify(product), { - status: 200, - headers: { - "Content-Type": "application/json" - } - } - ); -} -``` - -Questo risponderà a qualsiasi richiesta che corrisponda al percorso dinamico. Ad esempio, se navighiamo su `/helmet.json`, `params.id` verrà impostato su `helmet`. Se `helmet` esiste nel database del prodotto fittizio, l'endpoint utilizzerà la creazione di un oggetto `Response` per rispondere con JSON e restituire un [codice di stato HTTP](https://developer.mozilla.org/en-US/docs/Web/API/Response/status) riuscito. In caso contrario, utilizzerà un oggetto `Response` per rispondere con un `404`. - -In modalità SSR, alcuni provider richiedono l'intestazione `Content-Type` per restituire un'immagine. In questo caso, utilizza un oggetto `Response` per specificare una proprietà `headers`. Ad esempio, per produrre un'immagine binaria `.png`: - -```ts title="src/pages/astro-logo.png.ts" -export async function GET({ params, request }) { - const response = await fetch("https://docs.astro.build/assets/full-logo-light.png"); - const buffer = Buffer.from(await response.arrayBuffer()); - return new Response(buffer, { - headers: { "Content-Type": "image/png" }, - }); -} -``` - -### Metodi HTTP - -Oltre alla funzione `GET`, puoi esportare una funzione con il nome di qualsiasi [metodo HTTP](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods). Quando arriva una richiesta, Astro controllerà il metodo e chiamerà la funzione corrispondente. - -Puoi anche esportare una funzione `ALL` per far corrispondere qualsiasi metodo che non abbia una funzione esportata corrispondente. Se è presente una richiesta senza metodo corrispondente, verrà reindirizzata alla [pagina 404](/it/basics/astro-pages/#pagina-di-errore-404-personalizzata) del tuo sito. - -```ts title="src/pages/methods.json.ts" -export const GET: APIRoute = ({ params, request }) => { - return new Response(JSON.stringify({ - message: "This was a GET!" - }) - ) -} - -export const POST: APIRoute = ({ request }) => { - return new Response(JSON.stringify({ - message: "This was a POST!" - }) - ) -} - -export const DELETE: APIRoute = ({ request }) => { - return new Response(JSON.stringify({ - message: "This was a DELETE!" - }) - ) -} - -export const ALL: APIRoute = ({ request }) => { - return new Response(JSON.stringify({ - message: `This was a ${request.method}!` - }) - ) -} -``` - - - -### `request` - -In modalità SSR, la proprietà `request` restituisce un oggetto [`Request`](https://developer.mozilla.org/en-US/docs/Web/API/Request) completamente utilizzabile che fa riferimento alla richiesta corrente. Ciò ti consente di accettare dati e controllare le intestazioni: - -```ts title="src/pages/test-post.json.ts" -export const POST: APIRoute = async ({ request }) => { - if (request.headers.get("Content-Type") === "application/json") { - const body = await request.json(); - const name = body.name; - return new Response(JSON.stringify({ - message: "Your name was: " + name - }), { - status: 200 - }) - } - return new Response(null, { status: 400 }); -} -``` - -### Reindirizzamenti - -Il contesto dell'endpoint esporta un'utilità `redirect()` simile a `Astro.redirect`: - -```js title="src/pages/links/[id].js" {14} -import { getLinkUrl } from '../db'; - -export async function GET({ params, redirect }) { - const { id } = params; - const link = await getLinkUrl(id); - - if (!link) { - return new Response(null, { - status: 404, - statusText: 'Not found' - }); - } - - return redirect(link, 307); -} -``` diff --git a/src/content/docs/it/guides/fonts.mdx b/src/content/docs/it/guides/fonts.mdx deleted file mode 100644 index 1c776192a3a4b..0000000000000 --- a/src/content/docs/it/guides/fonts.mdx +++ /dev/null @@ -1,136 +0,0 @@ ---- -title: Aggiungere caratteri personalizzati -description: >- - Stai cercando di utilizzare un carattere personalizzato per il tuo sito Astro? Utilizza Google Fonts - con Fontsource o aggiungi un carattere personalizzato da un file locale. -i18nReady: true ---- -import PackageManagerTabs from '~/components/tabs/PackageManagerTabs.astro'; -import { Steps } from '@astrojs/starlight/components' - -Questa guida ti mostrerà come aggiungere caratteri (web font) personalizzati al tuo progetto e come utilizzarli nei tuoi componenti. - -## Aggiungere caratteri da un file locale - -In questo esempio vedremo come aggiungere un carattere personalizzato utilizzando il file di caratteri `DistantGalaxy.woff`. - - -1. Aggiungi il file del carattere alla cartella `public/fonts/`. -2. Aggiungi lo statement `@font-face` al tuo CSS. Puoi aggiungerlo in un file `.css` globale che importerai in seguito, in un blocco ` - ``` - - -## Aggiungere caratteri mediante Fontsource - -Il progetto [Fontsource](https://fontsource.org/) semplifica l'utilizzo di Google Fonts e di altri caratteri open source fornendo moduli npm che puoi installare in base ai caratteri che decidi di utilizzare. - - -1. Cerca il carattere che vuoi utilizzare nel [catalogo di Fontsource](https://fontsource.org/). In questo esempio useremo [Twinkle Star](https://fontsource.org/fonts/twinkle-star). -2. Installa il package relativo al carattere scelto. - - - - ```shell - npm install @fontsource/twinkle-star - ``` - - - ```shell - pnpm add @fontsource/twinkle-star - ``` - - - ```shell - yarn add @fontsource/twinkle-star - ``` - - - - :::tip - Puoi trovare il nome del package da utilizzare nella sezione "Quick Installation" di ogni pagina del carattere sul sito di Fontsource. È indicato con `@fontsource/` seguito dal nome del carattere. - ::: - -3. Importa il package del carattere nel componente in cui vuoi utilizzarlo. Di solito ha senso farlo in un layout "comune" per assicurarsi che il carattere sia disponibile in tutto il sito. - - L'importazione aggiungerà automaticamente le regole `@font-face` necessarie per impostare il carattere. - - ```astro title="src/layouts/BaseLayout.astro" - --- - import '@fontsource/twinkle-star'; - --- - ``` - -4. Utilizza il nome del carattere come valore di `font-family`, come mostrato nell'esempio `body` sulla pagina di Fontsource. Questo funzionerà in qualunque punto del tuo progetto Astro in cui puoi scrivere CSS. - - ```css - h1 { - font-family: "Twinkle Star", cursive; - } - ``` - - -## Aggiungere caratteri su Tailwind - -Se stai utilizzando l'[integrazione Tailwind](/it/guides/integrations-guide/tailwind/), puoi utilizzare uno dei metodi precedenti per installare il tuo carattere, con alcuni accorgimenti. Per installare il carattere puoi aggiungere uno statement [`@font-face` se stai usando un carattere locale](#aggiungere-caratteri-da-un-file-locale) oppure puoi utilizzare la [strategia di importazione di Fontsource](#aggiungere-caratteri-mediante-fontsource). - -Puoi aggiungere il tuo carattere su Tailwind seguendo questo passi: - - -1. Segui una delle guide menzionate sopra saltando l'ultimo passo (quello in cui si aggiunge `font-family` al CSS). -2. Aggiungi il nome del carattere a `tailwind.config.mjs`. - - Questo esempio aggiunge `Inter` allo stack di caratteri sans-serif, con i caratteri di fallback di default di Tailwind CSS. - - ```js title="tailwind.config.mjs" ins={1,8-10} - import defaultTheme from 'tailwindcss/defaultTheme' - - /** @type {import('tailwindcss').Config} */ - export default { - content: ['./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}'], - theme: { - extend: { - fontFamily: { - sans: ['Inter', ...defaultTheme.fontFamily.sans], - }, - }, - }, - plugins: [], - } - ``` - - Ora, tutti i testi sans-serif (il default di Tailwind) nel tuo progetto utilizzeranno il carattere scelto. Inoltre, la classe `font-sans` applicherà il carattere Inter. - - -Per maggiori informazioni, consulta la [guida alla configurazione di caratteri personalizzati di Tailwind](https://tailwindcss.com/docs/font-family#using-custom-values). - -## Risorse aggiuntive - -- Impara come funzionano i web font nella [guida di MDN sui web font](https://developer.mozilla.org/en-US/docs/Learn/CSS/Styling_text/Web_fonts). -- Genera il CSS per il tuo carattere con [il Webfont Generator di Font Squirrel](https://www.fontsquirrel.com/tools/webfont-generator). diff --git a/src/content/docs/it/guides/framework-components.mdx b/src/content/docs/it/guides/framework-components.mdx deleted file mode 100644 index 5151291467bee..0000000000000 --- a/src/content/docs/it/guides/framework-components.mdx +++ /dev/null @@ -1,240 +0,0 @@ ---- -title: Componenti di framework UI -description: Impara come usare React, Svelte, ecc. -i18nReady: true ---- -import IntegrationsNav from '~/components/IntegrationsNav.astro' -import ReadMore from '~/components/ReadMore.astro' - -Costruisci il tuo sito web Astro senza rinunciare al tuo framework UI preferito. Crea [Isole Astro](/it/concepts/islands/) con il tuo framework UI preferito. - -## Integrazione UI Framework ufficlali - -Astro supporta molti tra i framework più diffusi, tra cui [React](https://react.dev/), [Preact](https://preactjs.com/), [Svelte](https://svelte.dev/), [Vue](https://vuejs.org/), [SolidJS](https://www.solidjs.com/), [AlpineJS](https://alpinejs.dev/) e [Lit](https://lit.dev/) con integrazioni ufficiali. - -Scopri altri [framework mantenuti dalla community](https://astro.build/integrations/?search=&categories%5B%5D=frameworks) nella nostra directory apposita. - - - -## Installazione delle integrazioni - -Una o più di queste integrazioni Astro possono essere installate e configurate nel tuo progetto. - -Visualizza la [Guida alle integrazioni](/it/guides/integrations-guide/) per maggiori dettagli sull'installazione e la configurazione delle integrazioni Astro. - -:::tip -Vuoi vedere un esempio del framework che hai scelto? Visita [astro.new](https://astro.new/latest/frameworks) e seleziona uno dei modelli di framework. -::: - -## Utilizzo dei componenti di framework UI - -Usa i componenti del tuo framework JavaScript preferito nelle tue pagine, layout e componenti Astro proprio come se fossero dei componenti Astro! Tutti i tuoi componenti possono coesistere in `/src/components` o possono essere organizzati nel modo che preferisci. - -Per utilizzare un componente di un framework, importalo dal suo percorso relativo nello script del componente Astro. Quindi, utilizza il componente insieme ad altri componenti, elementi HTML ed espressioni simili a JSX nel modello del componente. - -```astro title="src/pages/static-components.astro" ins={2,7} ---- -import MyReactComponent from '../components/MyReactComponent.jsx'; ---- - - -

Usa componenti React direttamente in Astro!

- - - -``` - -Per impostazione predefinita, i componenti del framework verranno visualizzati solo sul server, come HTML statico. Ciò è utile per creare modelli di componenti che non sono interattivi ed evita di inviare JavaScript non necessario al client. - -## Componenti interattivi idratanti - -Un componente di framework UI può essere reso interattivo (idratato) utilizzando una [direttiva `client:*`](/it/reference/directives-reference/#client-directives). Si tratta di attributi del componente che determinano quando il JavaScript del componente deve essere inviato al browser. - -Con tutte le direttive client tranne `client:only`, il tuo componente verrà prima renderizzato sul server per generare HTML statico. Il componente JavaScript verrà inviato al browser in base alla direttiva scelta. Il componente si idraterà e diventerà interattivo. - -```astro title="src/pages/interactive-components.astro" /client:\S+/ ---- -// Example: idratare componenti di framework UI nel browser. -import InteractiveButton from '../components/InteractiveButton.jsx'; -import InteractiveCounter from '../components/InteractiveCounter.jsx'; -import InteractiveModal from '../components/InteractiveModal.svelte'; ---- - - - - - - - - -``` - -Il framework JavaScript (React, Svelte, ecc.) necessario per eseguire il rendering del componente verrà inviato al browser insieme al JavaScript del componente. Se due o più componenti di una pagina utilizzano lo stesso framework, il framework verrà inviato una sola volta. - -:::note[Accessibilità] -La maggior parte dei modelli di accessibilità specifici del framework dovrebbero funzionare allo stesso modo quando questi componenti vengono utilizzati in Astro. Assicurati di scegliere una direttiva client che garantisca che qualsiasi JavaScript relativo all'accessibilità venga caricato correttamente ed eseguito al momento opportuno! -::: - -### Direttive di idratazione disponibili - -Sono disponibili diverse direttive di idratazione per i componenti del framework dell'interfaccia utente: `client:load`, `client:idle`, `client:visible`, `client:media={QUERY}` e `client:only={FRAMEWORK}`. - -Consulta la nostra pagina [riferimento alle direttive](/it/reference/directives-reference/#client-directives) per una descrizione completa di queste direttive sull'idratazione e il loro utilizzo. - -## Combinare più frameowrk - -Puoi importare ed eseguire il rendering di componenti da più framework nello stesso componente Astro. - -```astro title="src/pages/mixing-frameworks.astro" ---- -// Esempio: combinazione di più componenti del framework sulla stessa pagina. -import MyReactComponent from '../components/MyReactComponent.jsx'; -import MySvelteComponent from '../components/MySvelteComponent.svelte'; -import MyVueComponent from '../components/MyVueComponent.vue'; ---- -
- - - -
-``` - -:::caution -Solo i componenti **Astro** (`.astro`) possono contenere componenti provenienti da più framework. -::: - -## Passaggio di proprietà ai componenti dei framework - -Puoi passare proprietà dai componenti Astro ai componenti dei framework: - -```astro title="src/pages/frameworks-props.astro" ---- -import TodoList from '../components/TodoList.jsx'; -import Counter from '../components/Counter.svelte'; ---- -
- - -
-``` - -:::caution[passare funzioni come proprietà] -Puoi passare una funzione come proprietà a un componente di un framework, ma questo funzionerà solo durante il rendering del server. Se provi a utilizzare la funzione in un componente idratato (ad esempio, come gestore eventi), si verificherà un errore. - -Questo perché le funzioni non possono essere _serializzate_ (trasferite dal server al client) da Astro. -::: - - -## Passaggio dei figli ai componenti del framework - -All'interno di un componente Astro, **puoi** passare dei figli ai componenti di un framework. Ogni framework ha un proprio meccanismo per fare riferimento a componenti figli: React, Preact e Solid usano tutti un oggetto speciale chiamato `children`, mentre Svelte e Vue usano l'elemento ``. - - -```astro title="src/pages/component-children.astro" {5} ---- -import MyReactSidebar from '../components/MyReactSidebar.jsx'; ---- - -

Ecco una barra laterale con del testo e un pulsante.

-
-``` - -Inoltre, puoi utilizzare [slot nominati](/it/basics/astro-components/#slot-con-nome) per raggruppare insieme figli specifici. - -Per React, Preact e Solid questi slot verranno convertiti in proprietà di livello superiore. I nomi degli slot che utilizzano `kebab-case` verranno convertiti in `camelCase`. - -```astro title="src/pages/named-slots.astro" /slot="(.*)"/ ---- -import MySidebar from '../components/MySidebar.jsx'; ---- - -

Menu

-

Ecco una barra laterale con del testo e un pulsante.

- -
-``` - -```jsx /{props.(title|socialLinks)}/ -// src/components/MySidebar.jsx -export default function MySidebar(props) { - return ( - - ) -} -``` - -Per Svelte e Vue è possibile fare riferimento a questi slot utilizzando un elemento `` con l'attributo `name`. I nomi degli slot che utilizzano `kebab-case` verranno conservati. - -```jsx /slot name="(.*)"/ -// src/components/MySidebar.svelte - -``` - -## Componenti della struttura inseriti l'uno nell'altro - -All'interno di un file Astro, i componenti figlio del framework possono anche essere componenti idratati. Ciò significa che puoi inserire ricorsivamente componenti l'uno nell'altro da uno qualsiasi di questi framework. - -```astro title="src/pages/nested-components.astro" {10-11} ---- -import MyReactSidebar from '../components/MyReactSidebar.jsx'; -import MyReactButton from '../components/MyReactButton.jsx'; -import MySvelteButton from '../components/MySvelteButton.svelte'; ---- - -

Ecco una barra laterale con del testo e un pulsante.

-
- - -
-
-``` - -:::caution -Ricorda: gli stessi file dei componenti del framework (ad esempio `.jsx`, `.svelte`) non possono mescolare più framework. -::: - -Ciò ti consente di creare intere "app" nel tuo framework JavaScript preferito e renderle, tramite un componente principale, in una pagina Astro. - -:::note -Il rendering dei componenti Astro viene sempre eseguito in HTML statico, anche quando includono componenti del framework idratati. Ciò significa che puoi passare solo proprietà che non eseguono alcun render in HTML. Passare gli "oggetti di rendering" di React ai componenti del framework da un componente Astro non funzionerà, perché i componenti Astro non possono fornire il comportamento di runtime del client richiesto da questo modello. Utilizza invece gli slot con nome. -::: - -## Posso utilizzare gli Astro Components all'interno dei miei Framework Components? - -Qualsiasi componente del framework dell'interfaccia utente diventa un´"isola" di tale framework. Questi componenti devono essere scritti interamente come codice valido per quel framework, utilizzando solo le proprie importazioni e pacchetti. Non è possibile importare componenti `.astro` in un componente del framework dell'interfaccia utente (ad esempio `.jsx` o `.svelte`). - -Puoi, tuttavia, utilizzare [il pattern Astro ``](/it/basics/astro-components/#slot) per passare il contenuto statico generato dai componenti Astro come figli ai componenti del framework **all'interno di un Componente `.astro`**. - -```astro title="src/pages/astro-children.astro" {6} ---- -import MyReactComponent from '../components/MyReactComponent.jsx'; -import MyAstroComponent from '../components/MyAstroComponent.astro'; ---- - - - -``` - -## Posso idratare i componenti Astro? - -Se provi a idratare un componente Astro con un modificatore `client:`, riceverai un errore. - -I [componenti Astro](/it/basics/astro-components/) sono componenti di template solo HTML senza runtime lato client. Puoi però utilizzare un tag ` -``` - -L'API `prefetch()` include la stessa rilevazione di [modalità risparmio dati](https://developer.mozilla.org/en/docs/Web/API/NetworkInformation/saveData) e [connessione lenta](https://developer.mozilla.org/en/docs/Web/API/NetworkInformation/effectiveType) in modo che il precaricamento avvenga solo quando necessario. - -Per ignorare il rilevamento di connessioni lente, puoi usare l'opzione `ignoreSlowConnection`: - -```js -// Precarica anche in modalità risparmio dati o connessione lenta -prefetch('/about', { ignoreSlowConnection: true }); -``` - -Assicurati di importare `prefetch()` solo negli script lato client poiché fa affidamento sulle API del browser. - -## Usarlo con le View Transitions - -Quando usi le [View Transitions](/it/guides/view-transitions/) in una pagina, il precaricamento verrà abilitato di default. Imposta una configurazione predefinita di `{ prefetchAll: true }` che abilita il [precaricamento per tutti i link](#precaricamento-di-tutti-i-link-di-default) nella pagina. - -Puoi personalizzare la configurazione di precaricamento in `astro.config.mjs` per sovrascrivere il valore di default. Per esempio: - -```js title="astro.config.mjs" -import { defineConfig } from 'astro/config'; - -export default defineConfig({ - // Disabilita completamente il precaricamento - prefetch: false -}); -``` - -```js title="astro.config.mjs" -import { defineConfig } from 'astro/config'; - -export default defineConfig({ - // Mantieni il precaricamento, ma solo per i link con `data-astro-prefetch` - prefetch: { - prefetchAll: false - } -}); -``` - -## Supporto dei browser - -Il prefetching di Astro utilizza [``](https://developer.mozilla.org/en/docs/Web/HTML/Attributes/rel/prefetch) se supportato dal browser, altrimenti utilizza l'[`API fetch()`](https://developer.mozilla.org/en/docs/Web/API/Fetch_API) al suo posto. - -I browser più diffusi supportano il prefetching di Astro con alcune differenze minori: - -### Chrome - -Chrome supporta ``. Il prefetching funziona come previsto. - -### Firefox - -Firefox supporta `` ma potrebbe visualizzare errori o fallire completamente: - - - Senza un'intestazione cache esplicita (ad es. [`Cache-Control`](https://developer.mozilla.org/en/docs/Web/HTTP/Headers/Cache-Control) o [`Expires`](https://developer.mozilla.org/en/docs/Web/HTTP/Headers/Expires)), il prefetching genererà un errore `NS_BINDING_ABORTED`. -- Anche in caso di errore, se la risposta ha un'intestazione [`ETag`](https://developer.mozilla.org/en/docs/Web/HTTP/Headers/ETag) valida, verrà riutilizzata durante la navigazione. -- In caso contrario, se si verifica un errore senza altre intestazioni cache, il prefetch non funzionerà. - -### Safari - -Safari non supporta `` e ricadrà sull'[`API fetch()`](https://developer.mozilla.org/en/docs/Web/API/Fetch_API), che richiede l'impostazione delle intestazioni cache (ad es. [`Cache-Control`](https://developer.mozilla.org/en/docs/Web/HTTP/Headers/Cache-Control), [`Expires`](https://developer.mozilla.org/en/docs/Web/HTTP/Headers/Expires) e [`ETag`](https://developer.mozilla.org/en/docs/Web/HTTP/Headers/ETag)). In caso contrario, il prefetch non funzionerà. - -**Caso limite:** le intestazioni `ETag` non funzionano nelle finestre private. - -### Raccomandazioni - -Per supportare al meglio tutti i browser, assicurati che le tue pagine abbiano le intestazioni cache appropriate. - -Per le pagine statiche o prerenderizzate, l'intestazione `ETag` è spesso impostata automaticamente dalla piattaforma di distribuzione e dovrebbe funzionare senza problemi. - -Per le pagine dinamiche e server-side, imposta le intestazioni cache appropriate in base al contenuto della pagina. Visita la [documentazione MDN sull'HTTP caching](https://developer.mozilla.org/en/docs/Web/HTTP/Caching) per ulteriori informazioni. - -## Migrazione da `@astrojs/prefetch` - -L'integrazione `@astrojs/prefetch` è stata deprecata nella v3.5.0 e verrà rimossa completamente. Usa le seguenti istruzioni per passare al precaricamento integrato di Astro che sostituisce questa integrazione. - - -1. Rimuovi l'integrazione `@astrojs/prefetch` e abilita la configurazione `prefetch` in `astro.config.mjs`: - - ```js title="astro.config.mjs" ins={6} del={2,5} - import { defineConfig } from 'astro/config'; - import prefetch from '@astrojs/prefetch'; - - export default defineConfig({ - integrations: [prefetch()], - prefetch: true - }); - ``` - -2. Converti dalle opzioni di configurazione di `@astrojs/prefetch`: - - - L'integrazione deprecata usava l'opzione `selector` per specificare quali link dovrebbero essere precaricati quando entrano nel viewport. - - Aggiungi invece `data-astro-prefetch="viewport"` a questi singoli link - - ```html - - ``` - - - L'integrazione deprecata usava l'opzione `intentSelector` per specificare quali link dovrebbero essere precaricati quando venivano passati sopra col mouse o messi a fuoco. - - Aggiungi `data-astro-prefetch` o `data-astro-prefetch="hover"` a questi singoli link: - - ```html - - - - - - ``` - - - L'opzione `throttles` di `@astrojs/prefetch` non è più necessaria poiché la nuova funzionalità di prefetch pianificherà e precaricherà in modo ottimale automaticamente. - diff --git a/src/content/docs/it/guides/routing.mdx b/src/content/docs/it/guides/routing.mdx deleted file mode 100644 index f6593a49d1e17..0000000000000 --- a/src/content/docs/it/guides/routing.mdx +++ /dev/null @@ -1,474 +0,0 @@ ---- -title: Navigazione -description: Un'introduzione al routing con Astro. -i18nReady: true ---- -import { FileTree } from '@astrojs/starlight/components'; -import RecipeLinks from "~/components/RecipeLinks.astro" -import Since from '~/components/Since.astro' -import ReadMore from '~/components/ReadMore.astro' - -Astro utilizza il **routing basato su file** per generare gli URL di build in base al layout del file della directory `src/pages/` del tuo progetto. - -## Navigazione tra le pagine - -Astro utilizza gli [elementi HTML standard ``](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a) per navigare tra i percorsi. Non viene fornito alcun componente `` specifico del framework. - -```astro title="src/pages/index.astro" -

Read more about Astro!

-``` - -## Percorsi statici - -[I componenti della pagina](/it/basics/astro-pages/) `.astro` nonché file Markdown e MDX (`.md`, `.mdx`) nella directory `src/pages/` **diventano automaticamente pagine del tuo sito web**. Il percorso di ogni pagina corrisponde al suo percorso e al nome file all'interno della directory `src/pages/`. - -```diff -# Esempio: percorsi statici -src/pages/index.astro -> mysite.com/ -src/pages/about.astro -> mysite.com/about -src/pages/about/index.astro -> mysite.com/about -src/pages/about/me.astro -> mysite.com/about/me -src/pages/posts/1.md -> mysite.com/posts/1 -``` - -:::tip -Non esiste una "configurazione di routing" separata da mantenere in un progetto Astro! Quando aggiungi un file alla directory `src/pages/`, viene creato automaticamente un nuovo percorso. Nelle build statiche, puoi personalizzare il formato di output del file utilizzando l'opzione di configurazione [`build.format`](/it/reference/configuration-reference/#buildformat). -::: - -## Percorsi dinamici - -Un file di pagine Astro può specificare parametri di percorso dinamici nel nome file per generare più pagine corrispondenti. Ad esempio, `src/pages/authors/[author].astro` genera una pagina bio per ogni autore sul tuo blog. `author` diventa un _parametro_ a cui puoi accedere dall'interno della pagina. - -Nella modalità di output statica predefinita di Astro, queste pagine vengono generate al momento della creazione, quindi è necessario predeterminare l'elenco degli `author` che ottengono un file corrispondente. In modalità SSR, verrà generata una pagina su richiesta per qualsiasi percorso corrispondente. - -### Modalità statica (SSG) - -Poiché tutte le rotte devono essere determinate in fase di creazione, una rotta dinamica deve esportare un `getStaticPaths()` che restituisce un array di oggetti con una proprietà `params`. Ciascuno di questi oggetti genererà un percorso corrispondente. - -`[dog].astro` definisce il parametro dinamico `dog` nel suo nome file, quindi gli oggetti restituiti da `getStaticPaths()` devono includere `dog` nei loro `params`. La pagina può quindi accedere a questo parametro utilizzando `Astro.params`. - -```astro title="src/pages/dogs/[dog].astro" ---- -export function getStaticPaths() { - return [ - {params: {dog: 'clifford'}}, - {params: {dog: 'rover'}}, - {params: {dog: 'spot'}}, - ]; -} - -const { dog } = Astro.params; ---- -
Good dog, {dog}!
-``` - -Verranno generate tre pagine: `/dogs/clifford`, `/dogs/rover` e `/dogs/spot`, ciascuna contenente il nome del cane corrispondente. - -Il nome file può includere più parametri, che devono essere tutti inclusi negli oggetti `params` in `getStaticPaths()`: - -```astro title="src/pages/[lang]-[version]/info.astro" ---- -export function getStaticPaths () { - return [ - {params: {lang: 'en', version: 'v1'}}, - {params: {lang: 'fr', version: 'v2'}}, - ]; -} - -const { lang, version } = Astro.params; ---- -... -``` - -Questo genererà `/en-v1/info` e `/fr-v2/info`. - -I parametri possono essere inclusi in parti separate del percorso. Ad esempio, il file `src/pages/[lang]/[version]/info.astro` con lo stesso `getStaticPaths()` genererà i percorsi `/it/v1/info` e `/fr/v2/info`. - -Ulteriori informazioni su [`getStaticPaths()`](/it/reference/routing-reference/#getstaticpaths). - - - - -#### Parametri Rest - -Se hai bisogno di maggiore flessibilità nel routing degli URL, puoi utilizzare un [parametro rest](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters) (`[.. .path]`) nel nome file `.astro` per abbinare percorsi di file di qualsiasi profondità: - -```astro title="src/pages/sequences/[...path].astro" ---- -export function getStaticPaths() { - return [ - {params: {path: 'one/two/three'}}, - {params: {path: 'four'}}, - {params: {path: undefined }} - ] -} - -const { path } = Astro.params; ---- -... -``` - -Questo genererà `/sequences/one/two/three`, `/sequences/four` e `/sequences`. (L'impostazione del parametro rest su `undefined` gli consente di corrispondere alla pagina di livello superiore.) - -I parametri rest possono essere utilizzati con **altri parametri con nome**. Ad esempio, il visualizzatore di file di GitHub può essere rappresentato con il seguente percorso dinamico: - -``` -/[org]/[repo]/tree/[branch]/[...file] -``` -In questo esempio, una richiesta per `/withastro/astro/tree/main/docs/public/favicon.svg` verrebbe suddivisa nei seguenti parametri denominati: - -```js -{ - org: 'withastro', - repo: 'astro', - branch: 'main', - file: 'docs/public/favicon.svg' -} -``` - -#### Esempio: pagine dinamiche a più livelli - -Nell'esempio seguente, un parametro rest (`[...slug]`) e la funzione [`props`](/it/reference/routing-reference/#data-passing-with-props) di `getStaticPaths()` generano pagine per slug di diversa profondità. - -```astro title="src/pages/[...slug].astro" ---- -export async function getStaticPaths() { - const pages = [ - { - slug: undefined, - title: "Astro Store", - text: "Welcome to the Astro store!", - }, - { - slug: "products", - title: "Astro products", - text: "We have lots of products for you", - }, - { - slug: "products/astro-handbook", - title: "The ultimate Astro handbook", - text: "If you want to learn Astro, you must read this book.", - }, - ]; - return pages.map(({ slug, title, text }) => { - return { - params: { slug }, - props: { title, text }, - }; - }); -} - -const { title, text } = Astro.props; ---- - - - {title} - - -

{title}

-

{text}

- - -``` - -### Modalità server (SSR) -Nella [modalità SSR](/it/guides/on-demand-rendering/), i percorsi dinamici sono definiti allo stesso modo: includi parentesi `[param]` o `[...path]` nei nomi dei file per corrispondere a quelli arbitrari stringhe o percorsi. Ma poiché i percorsi non vengono più creati in anticipo, la pagina verrà pubblicata su qualsiasi percorso corrispondente. Poiché questi non sono percorsi "statici", non è necessario utilizzare `getStaticPaths`. - -```astro title="src/pages/resources/[resource]/[id].astro" ---- -const { resource, id } = Astro.params; ---- -

{resource}: {id}

-``` -Questa pagina verrà pubblicata per qualsiasi valore di `risorsa` e `id`: `resources/users/1`, `resources/colors/blue`, ecc. - -#### Modifica dell'esempio `[...slug]` per SSR - -Poiché le pagine SSR non possono utilizzare `getStaticPaths()`, non possono ricevere proprietà. L'[esempio precedente](#esempio-pagine-dinamiche-a-più-livelli) può essere adattato per la modalità SSR cercando il valore del parametro `slug` in un oggetto. Se il percorso è alla radice ("/"), il parametro slug sarà `undefined`. Se il valore non esiste nell'oggetto, reindirizziamo a una pagina 404. - -```astro title="src/pages/[...slug].astro" ---- -const pages = [ - { - slug: undefined, - title: 'Astro Store', - text: 'Welcome to the Astro store!', - }, - { - slug: 'products', - title: 'Astro products', - text: 'We have lots of products for you', - }, - { - slug: 'products/astro-handbook', - title: 'The ultimate Astro handbook', - text: 'If you want to learn Astro, you must read this book.', - } -]; - -const { slug } = Astro.params; -const page = pages.find((page) => page.slug === slug); -if (!page) return Astro.redirect("/404"); -const { title, text } = page; ---- - - - {title} - - -

{title}

-

{text}

- - -``` - -## Reindirizzamenti - -A volte dovrai reindirizzare i tuoi lettori a una nuova pagina, in modo permanente perché la struttura del tuo sito è cambiata o in risposta a un'azione come l'accesso a un percorso autenticato. - -Puoi definire le regole per [reindirizzare gli utenti alle pagine spostate in modo permanente](#reindirizzamenti-configurati) nella configurazione di Astro. Oppure [reindirizza gli utenti in modo dinamico](#reindirizzamenti-dinamici) mentre utilizzano il tuo sito. - -### Reindirizzamenti configurati - -

- -Puoi specificare una mappatura di reindirizzamenti permanenti nella tua configurazione Astro con il valore `redirects`. Per la maggior parte dei reindirizzamenti, si tratta di una mappatura di un vecchio percorso sul nuovo percorso: - -```js title="astro.config.mjs" {4-6} -import { defineConfig } from 'astro/config'; - -export default defineConfig({ - redirects: { - '/old-page': '/new-page' - } -}); -``` - -Questi reindirizzamenti seguono le stesse regole dei percorsi basati su file. I percorsi dinamici sono consentiti purché sia il nuovo che il vecchio percorso contengano gli stessi parametri, ad esempio: - -```js -{ - "/blog/[...slug]": "/articles/[...slug]" -} -``` - -Utilizzando SSR o un adattatore statico, puoi anche fornire un oggetto come valore, permettendoti di specificare il codice `status` oltre alla nuova `destinazione`: - -```js title="astro.config.mjs" {5-8} -import { defineConfig } from 'astro/config'; - -export default defineConfig({ - redirects: { - '/old-page': { - status: 302, - destination: '/new-page' - } - } -}); -``` - -Quando si esegue `astro build`, Astro genererà file HTML con il tag [meta refresh](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta#examples) per impostazione predefinita. Gli adattatori supportati scriveranno invece il file di configurazione dell'host con i reindirizzamenti. - -Per impostazione predefinita, il codice di stato è `301`. Se si compila su file HTML, il codice di stato non viene utilizzato dal server. - -### Reindirizzamenti dinamici - -Sul globale `Astro`, il metodo `Astro.redirect` ti consente di reindirizzare dinamicamente a un'altra pagina. Potresti farlo dopo aver verificato se l'utente ha effettuato l'accesso ottenendo la sua sessione da un cookie. - -```astro title="src/pages/account.astro" {8} ---- -import { isLoggedIn } from '../utils'; - -const cookie = Astro.request.headers.get('cookie'); - -// Se l'utente non ha effettuato l'accesso, reindirizzarlo alla pagina di accesso -if (!isLoggedIn(cookie)) { - return Astro.redirect('/login'); -} ---- - - - -``` - -## Ordine di priorità del percorso - -È possibile che più percorsi corrispondano allo stesso percorso URL. Ad esempio, ciascuno di questi percorsi corrisponderebbe a `/posts/create`: - - -- src/pages/ - - [...slug].astro - - posts/ - - create.astro - - [page].astro - - [pid].ts - - [...slug].astro - - -Astro ha bisogno di sapere quale percorso deve essere utilizzato per creare la pagina. Per fare ciò, li ordina secondo le seguenti regole: - -- I percorsi con più segmenti di percorso avranno la precedenza sui percorsi meno specifici. Nell'esempio sopra, tutti i percorsi sotto `/posts/` avranno la precedenza su `/[...slug].astro` alla radice. -- I percorsi statici senza parametri di percorso avranno la precedenza sui percorsi dinamici. Ad esempio, `/posts/create.astro` avrà la precedenza su tutti gli altri percorsi nell'esempio. -- I percorsi dinamici che utilizzano parametri denominati avranno la precedenza sui parametri rest. Ad esempio, `/posts/[page].astro` avrà la precedenza su `/posts/[...slug].astro`. -- I percorsi dinamici pre-renderizzati avranno la precedenza sui percorsi dinamici del server. -- Gli endpoint avranno la precedenza sulle pagine. -- Se nessuna delle regole sopra decide l'ordine, i percorsi sono ordinati in ordine alfabetico in base alla localizzazione predefinita dell'installazione di Node. - -Considerando l'esempio sopra, ecco alcuni esempi di come le regole abbineranno un URL richiesto al percorso utilizzato per creare l'HTML: - -- `pages/posts/create.astro` - Produrrà solo `/posts/create` -- `pages/posts/[pid].ts` - Produrrà `/posts/abc`, `/posts/xyz`, ecc. Ma non `/posts/create` -- `pages/posts/[page].astro` - Produrrà `/posts/1`, `/posts/2`, ecc. Ma non `/posts/create`, `/posts/abc` né `/posts/xyz` -- `pages/posts/[...slug].astro` - Produrrà `/posts/1/2`, `/posts/a/b/c`, ecc. Ma non `/posts/create`, `/posts/1`, `/posts/abc`, ecc. -- `pages/[...slug].astro` - Produrrà `/abc`, `/xyz`, `/abc/xyz`, ecc. Ma non `/posts/create`, `/posts/1`, `/posts/abc`, , ecc. - -## Impaginazione - -Astro supporta l'impaginazione integrata per grandi raccolte di dati che devono essere suddivise in più pagine. Astro genererà proprietà di impaginazione comuni, inclusi URL della pagina precedente/successiva, numero totale di pagine e altro. - -I nomi delle rotte impaginate dovrebbero utilizzare la stessa sintassi `[bracket]` di una rotta dinamica standard. Ad esempio, il nome file `/astronauts/[page].astro` genererà percorsi per `/astronauts/1`, `/astronauts/2`, ecc., dove `[page]` è il numero di pagina generato. - -Puoi utilizzare la funzione `paginate()` per generare queste pagine per un array di valori in questo modo: - -```astro /{ (paginate) }/ /paginate\\(.*\\)/ /(?<=const.*)(page)/ /page\\.[a-zA-Z]+/ ---- -// src/pages/astronauts/[page].astro -export async function getStaticPaths({ paginate }) { - const astronautPages = [{ - astronaut: 'Neil Armstrong', - }, { - astronaut: 'Buzz Aldrin', - }, { - astronaut: 'Sally Ride', - }, { - astronaut: 'John Glenn', - }]; - // Genera pagine dal nostro array di astronauti, con 2 per pagina - return paginate(astronautPages, { pageSize: 2 }); -} -// Tutti i dati impaginati vengono passati alla prop "pagina". -const { page } = Astro.props; ---- - - -

Page {page.currentPage}

-
    - - {page.data.map(({ astronaut }) =>
  • {astronaut}
  • )} -
-``` - -Questo genera le seguenti pagine, con 2 elementi per pagina: -- `/astronauts/1` - Pagina 1: visualizza "Neil Armstrong" e "Buzz Aldrin" -- `/astronauts/2` - Pagina 2: visualizza "Sally Ride" e "John Glenn" - - -### La proprità `page` - -Quando usi la funzione `paginate()`, a ogni pagina verranno passati i suoi dati tramite una proprietà `page`. La proprità `page` ha molte proprietà utili, ma ecco i punti salienti: -- **page.data** - array contenente la porzione di dati della pagina che hai passato alla funzione `paginate()` -- **page.url.next** - collegamento alla pagina successiva nel set -- **page.url.prev** - collegamento alla pagina precedente nel set - -```astro /(?<=const.*)(page)/ /page\\.[a-zA-Z]+(?:\\.(?:prev|next))?/ ---- -// src/pages/astronauts/[page].astro -// Impagina lo stesso elenco di oggetti { astronaut } dell'esempio precedente -export async function getStaticPaths({ paginate }) { /* ... */ } -const { page } = Astro.props; ---- -

Page {page.currentPage}

-
    - {page.data.map(({ astronaut }) =>
  • {astronaut}
  • )} -
-{page.url.prev ? Previous : null} -{page.url.next ? Next : null} -``` - - -#### Riferimento API completo - -```ts -interface Page { - /** risultato */ - data: T[]; - /** metadati */ - /** il conteggio del primo elemento della pagina, a partire da 0 */ - start: number; - /** il conteggio dell'ultimo elemento della pagina, a partire da 0 */ - end: number; - /** numero totale di risultati */ - total: number; - /** il numero della pagina corrente, a partire da 1 */ - currentPage: number; - /** numero di elementi per pagina (default: 25) */ - size: number; - /** numero dell'ultima pagina */ - lastPage: number; - url: { - /** URL della pagina corrente */ - current: string; - /** URL della pagina precedente (se presente) */ - prev: string | undefined; - /** URL della pagina successiva (se presente) */ - next: string | undefined; - }; -} -``` - -### Impaginazione all'interno di altri percorsi - -Un caso d'uso più avanzato per l'impaginazione è l'**impaginazione all'interno di altri percorsi.** Questo avviene quando l'impaginazione viene combinata con altri parametri di percorso dinamici. Puoi utilizzare l'impaginazione all'interno di altri percorsi per raggruppare la tua raccolta impaginata in base ad alcune proprietà o tag. - -Ad esempio, se desideri raggruppare i tuoi post Markdown impaginati in base a qualche tag, utilizzeresti l'impaginazione all'interno di altri percorsi creando una pagina `/src/pages/[tag]/[page].astro` che corrisponda ai seguenti URL: - -- `/red/1` (tag=red) -- `/red/2` (tag=red) -- `/blue/1` (tag=blue) -- `/green/1` (tag=green) - -L'impaginazione nidificata funziona restituendo un array di risultati `paginate()` da `getStaticPaths()`, uno per ciascun raggruppamento. - -Nell'esempio seguente, implementeremo l'impaginazione all'interno di altri percorsi per creare gli URL sopra elencati: - -```astro /(?:[(]|=== )(tag)/ "params: { tag }" /const [{ ]*(page|params)/ ---- -// src/pages/[tag]/[page].astro -export async function getStaticPaths({ paginate }) { - const allTags = ['red', 'blue', 'green']; - const allPosts = await Astro.glob('../../posts/*.md'); - // Per ogni tag, restituisce un risultato paginate(). - // Assicurati di passare `{params: {tag}}` a `paginate()` - // in modo che Astro sappia a quale gruppo di tag è rivolto il risultato. - return allTags.flatMap((tag) => { - const filteredPosts = allPosts.filter((post) => post.frontmatter.tag === tag); - return paginate(filteredPosts, { - params: { tag }, - pageSize: 10 - }); - }); -} -const { page } = Astro.props; -const params = Astro.params; -``` - -## Pagine escluse - -Puoi escludere pagine o directory dalla creazione anteponendo ai loro nomi un carattere di sottolineatura (`_`). I file con il prefisso `_` non verranno riconosciuti dal router e non verranno inseriti nella directory `dist/`. - -Puoi usarlo per disabilitare temporaneamente le pagine e anche per inserire test, utilità e componenti nella stessa cartella delle pagine correlate. - -In questo esempio, solo `src/pages/index.astro` e `src/pages/posts/post1.md` verranno creati come percorsi di pagina e file HTML. - - -- src/pages/ - - _hidden-directory/ - - page1.md - - page2.md - - _hidden-page.astro - - **index.astro** - - posts/ - - _SomeComponent.astro - - _utils.js - - **post1.md** - diff --git a/src/content/docs/it/guides/upgrade-to/v2.mdx b/src/content/docs/it/guides/upgrade-to/v2.mdx deleted file mode 100644 index 5f6a628a5a3d4..0000000000000 --- a/src/content/docs/it/guides/upgrade-to/v2.mdx +++ /dev/null @@ -1,424 +0,0 @@ ---- -title: Aggiorna alla v2 di Astro -description: Come aggiornare il tuo progetto all'ultima versione di Astro. -i18nReady: true ---- -import PackageManagerTabs from '~/components/tabs/PackageManagerTabs.astro' -import { FileTree } from '@astrojs/starlight/components'; - - -Questa guida ti aiuterà a passare da Astro v1 ad Astro v2. - -Hai bisogno di aggiornare un vecchio progetto a v1? Vedi la nostra [vecchia guida alla migrazione](/it/guides/upgrade-to/v1/). - -## Aggiorna Astro - -Aggiorna Astro all'ultima versione usando il tuo package manager. Se stai usando le integrazioni di Astro, aggiorna anche queste ultime alla versione più recente. - - - - ```shell - # Upgrade to Astro v2.x - npm install astro@latest - - # Example: upgrade React and Tailwind integrations - npm install @astrojs/react@latest @astrojs/tailwind@latest - ``` - - - ```shell - # Upgrade to Astro v2.x - pnpm add astro@latest - - # Example: upgrade React and Tailwind integrations - pnpm add @astrojs/react@latest @astrojs/tailwind@latest - ``` - - - ```shell - # Upgrade to Astro v2.x - yarn add astro@latest - - # Example: upgrade React and Tailwind integrations - yarn add @astrojs/react@latest @astrojs/tailwind@latest - ``` - - - -## Astro v2.0 Cambiamenti principali - -Astro v2.0 include alcuni cambiamenti importanti, come anche la rimozione di funzionalità obsolete. Se il tuo progetto non funziona come dovrebbe dopo l'aggiornamento alla v2.0, consulta questa guida per una panoramica di tutti i cambiamenti e le istruzioni su come aggiornare il tuo codice. - -Vedi il [registro delle modifiche](https://github.com/withastro/astro/blob/main/packages/astro/CHANGELOG.md) per le note di rilascio complete. - -### Rimosso: Supporto di Node 14 - -È previsto che nell'Aprile 2023 Node 14 concluderà il suo ciclo di vita. - -Astro v2.0 non supporterà più Node 14, in modo che gli utenti di Astro possano trarre vantaggio dalle funzionalità più moderne di Node. - -#### Cosa devo fare? - -Controlla che sia l'ambiente di sviluppo che l'ambiente di distribuzione stiano usando **Node `16.12.0` o versioni successive **. - -1. Controlla la tua versione locale di Node usando: - - ```sh - node -v - - ``` - Se il tuo ambiente di sviluppo locale ha bisogno di un aggiornamento, [installa Node](https://nodejs.org/it/download/). - - -2. Controlla la documentazione del tuo [ambiente di distribuzione](/it/guides/deploy/) per verificare che supporti Node 16. - - Puoi specificare Node `16.12.0` per il tuo progetto Astro sia in un'impostazione della configurazione del pannello di controllo che in un file `.nvmrc`. - - -### Riservato: `src/content/` - -Astro v2.0 ora include l'API delle Collezioni per organizzare i tuoi file Markdown e MDX in [raccolte di contenuti](/it/guides/content-collections/). Questa API riserva `src/content/` come cartella speciale. - -#### Cosa devo fare? - -Cambia il nome alla cartella esistente `src/content/` per evitare conflitti. Questa cartella, se esiste, ora può essere utilizzata solo per [raccolte di contenuti](/it/guides/content-collections/). - -### Cambiato: `Astro.site` barra finale - -Nella versione 1.x, Astro assicurava che l'URL impostato come `site` in `astro.config.mjs` avesse sempre una barra finale quando si accedeva tramite `Astro.site`. - -Astro v2.0 non modifica più il valore di `site`. `Astro.site` utilizzerà il valore esatto che è stato definito e, se lo si desidera, la barra finale deve essere specificata. - -#### Cosa devo fare? - - In `astro.config.mjs`, aggiungi una barra finale all'URL impostato in `site`. - -```js del={5} ins={6} -// astro.config.mjs -import { defineConfig } from 'astro/config'; - -export default defineConfig({ - site: 'https://example.com', - site: 'https://example.com/', -}); -``` - -### Cambiato: Cartella `_astro/` per asset della build - -Nella v1.x, gli asset venivano creati in varie posizioni, tra cui `assets/`, `chunks/` e nella radice dell'output della build. - -Astro v2.0 sposta e unisce la posizione di tutti gli assets in una nuova cartella `_astro/`. - - -- dist/ - - _astro - - client.9218e799.js - - index.df3f880e0.css - - -Puoi controllare questa posizione con la [nuova opzione di configurazione `build.assets`](/it/reference/configuration-reference/#buildassets). - -#### Cosa devo fare? - -Aggiorna la configurazione della tua piattaforma di distribuzione se quest'ultima si basa sulla posizione degli assets. - -### Cambiato: Configurazione dei plugin di markdown - -#### Rimosso: `extendDefaultPlugins` - -Nella v1.x, Astro usava `markdown.extendDefaultPlugins` per riattivare i plugin predefiniti di Astro quando venivano aggiunti dei propri plugin di Markdown. - -Astro v2.0 rimuove questa opzione completamente perchè questo comportamento ora è predefinito. - -L'applicazione di plug-in remark e rehype nella configurazione di Markdown **non disabilita più i plug-in predefiniti di Astro**. GitHub-Flavored Markdown e Smartypants ora vengono applicati indipendentemente dalla configurazione di `remarkPlugins` o `rehypePlugins` personalizzati. - - -##### Cosa devo fare? - -Rimuovi `extendDefaultPlugins` nella tua configurazione. Ora questo è il comportamento predefinito di Astro nella v2.0, e puoi eliminare questa riga senza nessuna sostituzione. - -```js del={6} -// astro.config.mjs -import { defineConfig } from 'astro/config'; - -export default defineConfig({ - markdown: { - extendDefaultPlugins, - } -}); -``` - -#### Aggiunto: `gfm` e `smartypants` - -Nella v1.x, potevi scegliere se disabilitare entrambi i plugin di Markdown di Astro predefiniti (GitHub-Flavored Markdown e SmartyPants) impostando `markdown.extendDefaultPlugins: false`. - -Astro v2.0 sostituisce `markdown.extendDefaultPlugins: false` con delle opzioni booleane separate per controllare indipendentemente ognuno dei plugin Markdown di Astro. Questi sono abilitati di default e possono essere impostati su `false` in modo indipendente. - -##### Cosa devo fare? - -Rimuovi `extendDefaultPlugins: false` e aggiungi dei flag per disabilitare ciascun plugin indipendentemente. - -- `markdown.gfm: false` disabilita GitHub-Flavored Markdown -- `markdown.smartypants: false` disabilita SmartyPants - -```js del={6} ins={7-8} -// astro.config.mjs -import { defineConfig } from 'astro/config'; - -export default defineConfig({ - markdown: { - extendDefaultPlugins: false, - smartypants: false, - gfm: false, - } -}); -``` - -### Cambiato: Configurazione del plugin MDX - -#### Sostituito: `extendPlugins` cambiato con `extendMarkdownConfig` - -Nella v1.x, l'opzione `extendPlugins` dell'integrazione MDX gestiva come i tuoi file MDX dovevano ereditare le configurazioni di Markdown: tutte le tue configurazioni di Markdown (`markdown`), o solamente i plugin predefiniti di Astro (`default`). - -Astro v2.0 sostituisce questo comportamento controllato da `mdx.extendPlugins` con tre nuove opzioni, configurabili indipendentemente, che sono impostate a `true`: - -- **[`mdx.extendMarkdownConfig`](/it/guides/integrations-guide/mdx/#extendmarkdownconfig)** per ereditare tutte, o nessuna, le tue configurazioni di Markdown -- **`mdx.gfm`** per abilitare e disabilitare GitHub-Flavored Markdown nei file MDX -- **`mdx.smartypants`** per abilitare o disabilitare SmartyPants nei file MDX - -##### Cosa devo fare? - -Elimina `extendPlugins: 'markdown'` nella tua configurazione. Ora questo comportamento è predefinito. - -```js del={8} -// astro.config.mjs -import { defineConfig } from 'astro/config'; -import mdx from '@astrojs/mdx'; - -export default defineConfig({ - integrations: [ - mdx({ - extendPlugins: 'markdown', - }), - ], -}); -``` - -Sostituisci `extendPlugins: 'defaults'` con `extendMarkdownConfig: false` e aggiungi le opzioni separate per GitHub-Flavored Markdown e SmartyPants per abilitare indipendentemente questi plugin predefiniti in MDX. - -```js del={8} ins={9-11} -// astro.config.mjs -import { defineConfig } from 'astro/config'; -import mdx from '@astrojs/mdx'; - -export default defineConfig({ - integrations: [ - mdx({ - extendPlugins: 'defaults', - extendMarkdownConfig: false, - smartypants: true, - gfm: true, - }), - ], -}); -``` - -#### Aggiunto: Maggiori opzioni di configurazione di MDX per stare al passo con Markdown - -Astro v2.0 ti permette ora di impostare individualmente [ogni possibile opzione di configurazione di Markdown](/it/reference/configuration-reference/#markdown-options) (eccetto `drafts`) separatamente nella configurazione della tua integrazione MDX. - -```js -// astro.config.mjs -import { defineConfig } from 'astro/config'; -import mdx from '@astrojs/mdx'; - -export default defineConfig({ - markdown: { - remarkPlugins: [remarkPlugin1], - gfm: true, - }, - integrations: [ - mdx({ - remarkPlugins: [remarkPlugin2], - gfm: false, - }) - ] -}); -``` - -##### Cosa devo fare? - -Rivedi le configurazioni di Markdown e MDX e confronta la tua configurazione con le nuove opzioni disponibili. - - -### Cambiato: Accesso dei plugn all'avantesto - -Nella v1.x, i plugin remark e rehype non avevano accesso all'avantesto dell'utente. Astro ha unito l'avantesto del plugin con l'avantesto del tuo file, senza dover passare l'avantesto del file ai tuoi plugin. - -Astro v2.0 consente ai plugin remark e rehype l'accesso all'avantesto degli utenti tramite l'inserimento di avantesto. Ciò consente agli autori di plug-in di modificare l'avantesto esistente di un utente o di calcolare nuove proprietà basate su altre proprietà. - - -#### Cosa devo fare? - -Controlla qualsiasi plugin remark e rehype che hai scritto per vedere se il loro comportamento sia cambiato. Nota che `data.astro.frontmatter` è adesso l'_intero_ avantesto del documento Markdown o MDX, piuttosto che un oggetto vuoto. - - -### Cambiato: Configurazione di RSS - -Nella v1.x, il pacchetto RSS di Astro permetteva di usare `items: import.meta.glob(...)` per generare un elenco di elementi del feed RSS. Questo utilizzo è ora obsoleto e sarà rimosso in futuro. - -Astro v2.0 introduce un `pagesGlobToRssItems()` wrapper alla proprietà `items`. - - -#### Cosa devo fare? - -Importa la funzione helper `pagesGlobToRssItems()`, dopodiché passa la funzione esistente che utilizza `import.meta.glob()` come argomento all'helper stesso. - -```js ins={3, 8, 10} -// src/pages/rss.xml.js -import rss, { - pagesGlobToRssItems -} from '@astrojs/rss'; - -export async function get(context) { - return rss({ - items: await pagesGlobToRssItems( - import.meta.glob('./blog/*.{md,mdx}'), - ), - }); -} -``` - -### Cambiato: Supporto di Svelte per l'IDE - -Se stai usando [l'integrazione `@astrojs/svelte`](/it/guides/integrations-guide/svelte/) devi includere il file `svelte.config.js` nel tuo progetto . Ciò è necessario per fornire il completamento automatico dell'IDE. - -#### Cosa devo fare? - -Aggiungi il file `svelte.config.js` alla radice del tuo progetto: - -```js -// svelte.config.js -import { vitePreprocess } from '@astrojs/svelte'; - -export default { - preprocess: vitePreprocess(), -}; -``` - -Per i nuovi utenti, questo file sarà aggiunto automaticamente con l'esecuzione di `astro add svelte`. - -### Rimosso: `legacy.astroFlavoredMarkdown` - -Già nella v1.0, Astro aveva dichiarato come deprecato il vecchio Astro-Flavored Markdown (conosciuto anche come Components in Markdown). - -Astro v2.0 rimuove l'opzione `legacy.astroFlavoredMarkdown` completamente. Importare e usare componenti nei file `.md` non funzionerà più. - -#### Cosa devo fare? - -Rimuovi questo flag. Non è più disponibile in Astro. - -```js del={3-5} -// astro.config.mjs -export default defineConfig({ - legacy: { - astroFlavoredMarkdown: true, - }, -}) - -``` - -Se stavi usando questa funzionalità nella v1.x, suggeriamo di [usare l'integrazione di MDX](/it/guides/integrations-guide/mdx/) che ti permette di combinare componenti ed espressioni JSX con la sintassi di Markdown. - -### Rimosso: `Astro.resolve()` - -Nella v0.24, Astro ha deprecato `Astro.resolve()` per ottenere gli URL determinati delle risorse a cui potresti voler fare riferimento nel browser. - -Astro v2.0 rimuove questa opzione completamente. L'utilizzo di `Astro.resolve()` nel tuo codice provocherà un errore. - -#### Cosa devo fare? - -Determina i percorsi delle risorse utilizzando invece `import`. Per esempio: - -```astro ---- -// src/pages/index.astro -import 'style.css'; -import imageUrl from './image.png'; ---- - - -``` - -### Rimosso: `Astro.fetchContent()` - -Nella v0.26, Astro ha deprecato `Astro.fetchContent()` per il recupero dei dati dai file Markdown locali. - -Astro v2.0 rimuove questa opzione completamente. L'utilizzo di `Astro.fetchContent()` nel tuo codice provocherà un errore. - -#### Cosa devo fare? - -Usa [`Astro.glob()`](/it/reference/api-reference/#astroglob) per recuperare i file di Markdown, oppure passa alla funzionalità [Collezione di Contenuti](/it/guides/content-collections/). - -```astro ---- -// src/pages/index.astro -const allPosts = await Astro.glob('./posts/*.md'); ---- -``` - -### Rimosso: `Astro.canonicalURL` - -Nella v1.0, Astro ha deprecato `Astro.canonicalURL` per costruire un URL canonico. - - -Astro v2.0 rimuove questa opzione completamente. L'utilizzo di `Astro.canonicalURL` nel tuo codice provocherà un errore. - -#### Cosa devo fare? - -Usa `Astro.url` per costruire un URL canonico. - -```astro ---- -// src/pages/index.astro -const canonicalURL = new URL(Astro.url.pathname, Astro.site); ---- - -``` - -### Aggiornato: Vite 4 - -Astro v2.0 passa da Vite 3 a [Vite 4](https://vite.dev/), rilasciato a Dicembre 2022. - -#### Cosa devo fare? - -Non dovrebbero essere necessarie modifiche al codice! Abbiamo gestito al tuo posto la maggior parte dell'aggiornamento all'interno di Astro; tuttavia, alcuni sottili comportamenti di Vite possono ancora cambiare tra le versioni. - -Fai riferimento alla [Guida ufficiale per la Migrazione di Vite](https://vite.dev/guide/migration.html) se dovessi incontrare dei problemi. - -## Flag Sperimentali rimossi in Astro v2.0 - -Rimuovi i seguenti flag da `astro.config.mjs`: - -```js del={5-9} -// astro.config.mjs -import { defineConfig } from 'astro/config'; - -export default defineConfig({ - experimental: { - contentCollections: true, - prerender: true, - errorOverlay: true, - }, -}) -``` - -Queste funzionalità sono ora disponibili di default: - -- [Collezioni di Contenuti](/it/guides/content-collections/) come un modo per gestire i tuoi file Markdown e MDX con la sicurezza dei tipi di dati. -- [Prerendering delle pagine individuali in HTML statico](/it/guides/on-demand-rendering/) quando si utilizza SSR (rendering lato server) per migliorare la velocità e il caching. -- Un overlay dei messaggi di errore riprogettato. - -## Problemi conosciuti - -Attualmente non ci sono problemi conosciuti. diff --git a/src/content/docs/it/recipes/add-yaml-support.mdx b/src/content/docs/it/recipes/add-yaml-support.mdx deleted file mode 100644 index 63ea6713f0dd3..0000000000000 --- a/src/content/docs/it/recipes/add-yaml-support.mdx +++ /dev/null @@ -1,64 +0,0 @@ ---- -title: Installare un plugin Vite o Rollup -description: Impara come importare dati YAML aggiungendo un plugin Rollup al tuo progetto. -i18nReady: true -type: recipe ---- - -import PackageManagerTabs from '~/components/tabs/PackageManagerTabs.astro' - -Astro è basato su Vite, e supporta sia i plugin Vite che Rollup. Questa ricetta utilizza un plugin Rollup per aggiungere la possibilità di importare un file YAML (`.yml`) in Astro. - -## Ricetta - -1. Installa `@rollup/plugin-yaml`: - - - - ```shell - npm install @rollup/plugin-yaml --save-dev - ``` - - - ```shell - pnpm add @rollup/plugin-yaml --save-dev - ``` - - - ```shell - yarn add @rollup/plugin-yaml --save-dev - ``` - - - -2. Importa il plugin nel tuo `astro.config.mjs` e aggiungilo all'array dei plugin Vite: - - ```js title="astro.config.mjs" ins={2,5-7} - import { defineConfig } from 'astro/config'; - import yaml from '@rollup/plugin-yaml'; - - export default defineConfig({ - vite: { - plugins: [yaml()] - } - }); - ``` - - -3. A questo punto, puoi importare i dati YAML utilizzando l'istruzione `import`: - - ```js - import yml from './data.yml'; - ``` - - :::note - Mentre puoi importare dati YAML nel tuo progetto Astro, il tuo editor non fornirà tipi per i dati importati. Per aggiungere i tipi, crea o trova un file `*.d.ts` esistente nella directory `src` del tuo progetto e aggiungi quanto segue: - ```ts title="src/files.d.ts" - // Specifica l'estensione del file che vuoi importare - declare module "*.yml" { - const value: any; // Aggiungi le definizioni dei types qui se desideri - export default value; - } - ``` - Questo permetterà al tuo editor di fornire suggerimenti sui types per i tuoi dati YAML. - ::: diff --git a/src/content/docs/it/recipes/build-custom-img-component.mdx b/src/content/docs/it/recipes/build-custom-img-component.mdx deleted file mode 100644 index b4846b0a3e4bd..0000000000000 --- a/src/content/docs/it/recipes/build-custom-img-component.mdx +++ /dev/null @@ -1,128 +0,0 @@ ---- -title: Crea un componente immagine personalizzato -description: Impara come creare un componente immagine personalizzato che supporta le media query utilizzando la funzione getImage. -i18nReady: true -type: recipe ---- - -Astro fornisce due componenti integrati che puoi utilizzare per visualizzare e ottimizzare le tue immagini. Il componente `` ti consente di visualizzare immagini responsive e di lavorare con diversi formati e dimensioni. Il componente `` ottimizzerà le tue immagini e ti consentirà di passare diversi formati e proprietà di qualità. - -Quando hai bisogno di opzioni che i componenti `` e `` non supportano attualmente, puoi utilizzare la funzione `getImage()` per creare un componente personalizzato. - -In questa ricetta, userai la funzione [`getImage()`](/it/guides/images/#generating-images-with-getimage) per creare il tuo componente immagine personalizzato che visualizza diverse immagini di origine in base alle media query. - -## Ricetta - -1. Crea un nuovo componente Astro e importa la funzione `getImage()` - - ```astro title="src/components/MyCustomImageComponent.astro" - --- - import { getImage } from "astro:assets"; - --- - - ``` - -2. Crea un nuovo componente per la tua immagine personalizzata. `MyCustomComponent.astro` riceverà tre `props` da `Astro.props`. Le props `mobileImgUrl` e `desktopImgUrl` vengono utilizzate per creare la tua immagine a diverse dimensioni del viewport. La prop `alt` viene utilizzata per il testo alternativo dell'immagine. Queste props verranno passate ovunque tu renda i tuoi componenti immagine personalizzati. Aggiungi le seguenti importazioni e definisci le props che utilizzerai nel tuo componente. Puoi anche utilizzare TypeScript per digitare le props. - - ```astro title="src/components/MyCustomImageComponent.astro" ins={3, 11} - --- - import type { ImageMetadata } from "astro"; - import { getImage } from "astro:assets"; - - interface Props { - mobileImgUrl: string | ImageMetadata; - desktopImgUrl: string | ImageMetadata; - alt: string; - } - - const { mobileImgUrl, desktopImgUrl, alt } = Astro.props; - --- - - ``` - -3. Definisci ciascuna delle tue immagini responsive chiamando la funzione `getImage()` con le proprietà desiderate. - - ```astro title="src/components/MyCustomImageComponent.astro" ins={13-18, 20-25} - --- - import type { ImageMetadata } from "astro"; - import { getImage } from "astro:assets"; - - interface Props { - mobileImgUrl: string | ImageMetadata; - desktopImgUrl: string | ImageMetadata; - alt: string; - } - - const { mobileImgUrl, desktopImgUrl, alt } = Astro.props; - - const mobileImg = await getImage({ - src: mobileImgUrl, - format: "webp", - width: 200, - height: 200, - }); - - const desktopImg = await getImage({ - src: desktopImgUrl, - format: "webp", - width: 800, - height: 200, - }); - --- - - ``` - -4. Crea un elemento `` che genera un `srcset` con le tue diverse immagini in base alle media query desiderate. - - ```astro title="src/components/MyCustomImageComponent.astro" ins={28-32} - --- - import type { ImageMetadata } from "astro"; - import { getImage } from "astro:assets"; - - interface Props { - mobileImgUrl: string | ImageMetadata; - desktopImgUrl: string | ImageMetadata; - alt: string; - } - - const { mobileImgUrl, desktopImgUrl, alt } = Astro.props; - - const mobileImg = await getImage({ - src: mobileImgUrl, - format: "webp", - width: 200, - height: 200, - }); - - const desktopImg = await getImage({ - src: desktopImgUrl, - format: "webp", - width: 800, - height: 200, - }); - --- - - - - - {alt} - - - ``` - -5. Importa e usa il componente `` in qualsiasi file `.astro`. Assicurati di passare le props necessarie per generare due immagini diverse alle diverse dimensioni del viewport: - - ```astro title="src/pages/index.astro" - --- - import MyCustomImageComponent from "../components/MyCustomImageComponent.astro"; - import mobileImage from "../images/mobile-profile-image.jpg"; - import desktopImage from "../images/desktop-profile-image.jpg"; - --- - - - - ``` diff --git a/src/content/docs/it/recipes/bun.mdx b/src/content/docs/it/recipes/bun.mdx deleted file mode 100644 index f17440287a027..0000000000000 --- a/src/content/docs/it/recipes/bun.mdx +++ /dev/null @@ -1,137 +0,0 @@ ---- -title: Usa bun con Astro -description: Impara come usare Bun con il tuo sito Astro. -type: recipe -i18nReady: true ---- - -[Bun](https://bun.sh/) è un runtime e toolkit JavaScript all-in-one. Per maggiori informazioni, consulta [la documentazione di Bun](https://bun.sh/docs). - -:::caution -Bun ha rilasciato da poco la sua prima versione stabile. Tuttavia, l'utilizzo di Bun con Astro potrebbe rivelare qualche problema. Alcune integrazioni potrebbero non funzionare come previsto. Consulta [la documentazione ufficiale di Bun per lavorare con Astro](https://bun.sh/guides/ecosystem/astro) per maggiori dettagli. - -Se hai riscontri alcuni problemi usando Bun, perfavore [apri una Issue su GitHub con Bun direttamente](https://github.com/oven-sh/bun/issues/new/choose). -::: - -## Prerequisiti - -- Bun installato localmente sulla tua macchina. Consulta [le istruzioni di installazione](https://bun.sh/docs/installation) nella documentazione ufficiale di Bun. - -## Crea un nuovo progetto Astro con Bun - -Crea un nuovo progetto Astro con Bun usando il seguente comando `create-astro`: - -```bash -bunx create-astro@latest my-astro-project-using-bun -``` - -:::tip -Puoi creare anche un [nuovo progetto Astro da qualsiasi repository Astro GitHub esistente](/it/install-and-setup/#install-from-the-cli-wizard) usando il flag `--template`: -```bash -bunx create-astro@latest my-astro-project-using-bun --template eliancodes/brutal -``` -::: - -## Installare le dipendenze - -Se stai avviando un nuovo progetto usando `bunx create-astro`, la CLI utilizzerà automaticamente Bun per installare le dipendenze e puoi saltare questo passaggio. - -Altrimenti, dovrai installare le dipendenze con Bun: - -```bash -bun install -``` - -## Aggiungere i Types - -Bun pubblica i tipi di runtime per Bun nel pacchetto [`@types/bun`](https://www.npmjs.com/package/@types/bun). - -Installa `@types/bun` usando il seguente comando: - -```sh -bun add -d @types/bun -``` - -## Usare le integrazioni di Astro - -Potresti anche usare qualsiasi integrazione ufficiale di Astro con il comando `astro add`: - -```bash -bunx astro add react -``` - -## Esegui Astro con Bun - -:::note -Usa il flag CLI [`--bun`](https://bun.sh/docs/cli/bunx#shebangs) prima di ogni comando `astro` per usare il runtime di Bun al posto di Node. -::: - -### Esegui il server di sviluppo - -Per eseguire il server di sviluppo usando Bun come runtime, usa il seguente comando: - -```bash -bunx --bun astro dev -``` - -### Crea il tuo sito con Bun - -Per creare il tuo sito usando Bun come runtime, usa il seguente comando: - -```bash -bunx --bun astro build -``` - -Astro scriverà l'output del tuo sito nella cartella `dist/`. Puoi servire il tuo sito usando il comando `preview`: - -```bash -bunx --bun astro preview -``` - -## Aggiungere l'SSR con Bun - -Poiché Bun supporta la [compatibilità con le API di Node.js](https://bun.sh/docs/runtime/nodejs-apis), puoi usare qualsiasi adattatore Astro per [il rendering lato server](/it/guides/on-demand-rendering/) al tuo progetto Astro: - -```bash -bunx astro add vercel -``` - -## Testare con Bun - -Bun è fornito con un test runner integrato, veloce e compatibile con Jest, tramite il comando `bun test`. Se vuoi usarlo, leggi la documentazione di [`bun test`](https://bun.sh/docs/cli/test). - -Comunque, è anche possibile usare Cypress o Playwright per un approccio moderno al testing delle web app. - -### Cypress - -Cypress è un tool di testing front-end e ha come obiettivo "rendere l'esperienza di testing piacevole e generare felicità per gli sviluppatori". Questo ti permette di scrivere test end-to-end per il tuo sito Astro. - -Installa Cypress con il seguente comando: - -```bash -bun add cypress --dev -``` - -Per il resto della configurazione e per iniziare il tuo primo test, segui il resto del processo di Cypress nella [Guida al Testing di Astro](/it/guides/testing/#configuration). - -### Playwright - -Playwright è un framework di testing end-to-end che ti permette di testare il tuo codice Astro su tutti i moderni motori di rendering, inclusi Chromium, WebKit e Firefox. - -Installa Playwright con il seguente comando: - -```bash -bun create playwright -``` - -Per creare il tuo primo test di Playwright, segui le istruzioni per il resto del processo di Playwright nella [Guida al Testing di Astro](/it/guides/testing/#create-your-first-playwright-test). - -## Risorse Ufficiali - -- [Crea un app con Astro e Bun](https://bun.sh/guides/ecosystem/astro) - -## Risorse della Community - -Usi Bun con Astro? Aggiungi il tuo blog post o video a questa pagina! - -- [Crea un sito con Cloudflare Pages usando Bun](https://blog.otterlord.dev/posts/hello-from-bun/) - blog post diff --git a/src/content/docs/it/recipes/call-endpoints.mdx b/src/content/docs/it/recipes/call-endpoints.mdx deleted file mode 100644 index f91df73df08d2..0000000000000 --- a/src/content/docs/it/recipes/call-endpoints.mdx +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: Richiama endpoint dal server -description: Impara come richiamare endpoint dal server in Astro. -i18nReady: true -type: recipe ---- - -Gli endpoints possono essere utilizzati per fornire molti tipi di dati. Questa ricetta richiama un endpoint dal server dallo script del componente di una pagina per visualizzare un saluto, senza richiedere una richiesta fetch aggiuntiva. - -## Prerequisiti - -- Un progetto con [SSR](/it/guides/on-demand-rendering/) (output: 'server') abilitato - -## Ricetta - -1. Crea un endpoint in un nuovo file `src/pages/api/hello.ts` che restituisce alcuni dati: - - ```ts title="src/pages/api/hello.ts" - import type { APIRoute } from 'astro' - - export const GET: APIRoute = () => { - return new Response( - JSON.stringify({ - greeting: 'Hello', - }), - ) - } - ``` - -2. Su qualunque pagina Astro, importa il metodo `GET()` dall'endpoint. Chiamalo con il [`Astro` global](/it/reference/api-reference/) per fornire il contesto della richiesta, e usa la risposta sulla pagina: - - ```astro title="src/pages/index.astro" - --- - import { GET } from './api/hello.ts' - - let response = await GET(Astro) - const data = await response.json() - --- - -

{data.greeting} world!

- ``` diff --git a/src/content/docs/it/recipes/captcha.mdx b/src/content/docs/it/recipes/captcha.mdx deleted file mode 100644 index e7eeb0cad6c66..0000000000000 --- a/src/content/docs/it/recipes/captcha.mdx +++ /dev/null @@ -1,76 +0,0 @@ ---- -title: Verifica un Captcha -description: Impara come creare un percorso API e recuperarlo dal client. -i18nReady: true -type: recipe ---- - -Gli [endpoints del server](/it/guides/endpoints/#endpoint-server-percorsi-api) possono essere utilizzati come endpoint API REST per eseguire funzioni come autenticazioni, accesso al database e verifiche senza esporre dati sensibili al client. - -In questa ricetta, un percorso API viene utilizzato per verificare Google reCAPTCHA v3 senza esporre il secret ai client. - -## Prerequisiti -- Un progetto con [SSR](/it/guides/on-demand-rendering/) (`output: 'server'`) abilitato - -## Ricetta - -1. Crea un endpoint `POST` che accetta i dati di recaptcha, quindi li verifica con l'API di reCAPTCHA. Qui puoi definire in modo sicuro i valori segreti o leggere le variabili di ambiente. - - ```js title="src/pages/recaptcha.js" - export async function POST({ request }) { - const data = await request.json(); - - const recaptchaURL = 'https://www.google.com/recaptcha/api/siteverify'; - const requestHeaders = { - 'Content-Type': 'application/x-www-form-urlencoded' - }; - const requestBody = new URLSearchParams({ - secret: "YOUR_SITE_SECRET_KEY", // This can be an environment variable - response: data.recaptcha // The token passed in from the client - }); - - const response = await fetch(recaptchaURL, { - method: "POST", - headers: requestHeaders, - body: requestBody.toString() - }); - - const responseData = await response.json(); - - return new Response(JSON.stringify(responseData), { status: 200 }); - } - ``` - -2. Accedi al tuo endpoint utilizzando `fetch` da uno script client: - - ```astro title="src/pages/index.astro" - - - - - - - - - - - - ``` diff --git a/src/content/docs/it/recipes/external-links.mdx b/src/content/docs/it/recipes/external-links.mdx deleted file mode 100644 index 3124d857e0efe..0000000000000 --- a/src/content/docs/it/recipes/external-links.mdx +++ /dev/null @@ -1,65 +0,0 @@ ---- -title: Aggiungi delle icone ai link esterni -description: Impara come installare un plugin rehype per aggiungere icone ai link esterni nei tuoi file Markdown. -i18nReady: true -type: recipe ---- - -import PackageManagerTabs from '~/components/tabs/PackageManagerTabs.astro' - -Usando un plugin rehype, puoi identificare e modificare i link nei tuoi file Markdown che puntano a siti esterni. Questo esempio aggiunge icone alla fine di ogni link esterno, in modo che i visitatori sappiano che stanno lasciando il tuo sito. - -## Prerequisiti -- Un progetto Astro che usa Markdown per le pagine. - -## Ricetta - -1. Installa il plugin `rehype-external-links`. - - - - ```shell - npm install rehype-external-links - ``` - - - ```shell - pnpm add rehype-external-links - ``` - - - ```shell - yarn add rehype-external-links - ``` - - - -2. Importa il plugin nel tuo file `astro.config.mjs`. - - Passa `rehypeExternalLinks` all'array `rehypePlugins`, insieme a un oggetto di opzioni che include una proprietà `content`. Imposta la proprietà `type` su `text` se vuoi aggiungere del testo semplice alla fine del link. Per aggiungere invece HTML alla fine del link, imposta la proprietà `type` su `raw`. - - ```ts - // ... - import rehypeExternalLinks from 'rehype-external-links'; - - export default defineConfig({ - // ... - markdown: { - rehypePlugins: [ - [ - rehypeExternalLinks, - { - content: { type: 'text', value: ' 🔗' } - } - ], - ] - }, - }); - ``` - -:::note - Il valore della proprietà `content` [non è rappresentato nell'albero di accessibilità](https://developer.mozilla.org/en-US/docs/Web/CSS/content#accessibility_concerns). Pertanto, è meglio chiarire che il link è esterno nel contenuto circostante, piuttosto che fare affidamento solo sull'icona. -::: - -## Risorse -- [rehype-external-links](https://www.npmjs.com/package/rehype-external-links) diff --git a/src/content/docs/it/recipes/index.mdx b/src/content/docs/it/recipes/index.mdx deleted file mode 100644 index d3ff9b4f903c2..0000000000000 --- a/src/content/docs/it/recipes/index.mdx +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: Altre ricette -description: Vedi esempi guidati su come costruire funzionalità in Astro. -i18nReady: true ---- - -import RecipesNav from '~/components/RecipesNav.astro'; - -Vedi esempi guidati su come aggiungere funzionalità al tuo progetto Astro. - - -## Ricette ufficiali - - - -## Risorse della comunità - -- [Astro Tips](https://astro-tips.dev) - -{/* - -import ReadMore from '~/components/ReadMore.astro' - -Guarda ancora più ricette scritte e mantenute dalla community nelle nostre ricette e guide della community -*/} \ No newline at end of file diff --git a/src/content/docs/it/recipes/sharing-state.mdx b/src/content/docs/it/recipes/sharing-state.mdx deleted file mode 100644 index 92a4e2de34f2b..0000000000000 --- a/src/content/docs/it/recipes/sharing-state.mdx +++ /dev/null @@ -1,86 +0,0 @@ ---- -title: Condividere lo stato tra diversi componenti Astro -description: Come condividere lo stato tra diversi componenti Astro con Nano Stores. -i18nReady: true -type: recipe ---- - -import PackageManagerTabs from '~/components/tabs/PackageManagerTabs.astro' - -:::tip -Utilizzi componenti di un framework JS? Scopri [come condividere lo stato tra Isole](/it/recipes/sharing-state-islands/)! -::: - -Quando sviluppi un sito con Astro, potresti aver bisogno di condividere lo stato tra diversi componenti. Astro raccomanda l'utilizzo di [Nano Stores](https://github.com/nanostores/nanostores) per salvare lo stato condiviso lato client. - -## Soluzione - -1. Installa Nano Stores: - - - - ```shell - npm install nanostores - ``` - - - ```shell - pnpm add nanostores - ``` - - - ```shell - yarn add nanostores - ``` - - - -2. Crea uno *store*. In questo esempio, lo *store* tiene traccia dello stato della finestra di dialogo (aperta o meno): - - ```ts title="src/store.js" - import { atom } from 'nanostores'; - - export const isOpen = atom(false); - ``` - -3. Importa e utilizza lo *store* in un tag ` - ``` - - ```astro title="src/components/Dialog.astro" - - - - ``` - -## Risorse aggiuntive - -- [Nano Stores su NPM](https://www.npmjs.com/package/nanostores) -- [Documentazione di Nano Stores per Vanilla JS](https://github.com/nanostores/nanostores#vanilla-js) diff --git a/src/content/docs/it/reference/astro-syntax.mdx b/src/content/docs/it/reference/astro-syntax.mdx deleted file mode 100644 index 0244f7d7f3342..0000000000000 --- a/src/content/docs/it/reference/astro-syntax.mdx +++ /dev/null @@ -1,176 +0,0 @@ ---- -title: Sintassi Astro -description: un'introduzione alla sintassi del componente .astro. -i18nReady: true ---- - -**Se conosci l'HTML, ne sai già abbastanza per scrivere il tuo primo componente Astro.** - -La sintassi del componente Astro è un superset di HTML. La sintassi è stata [progettata per risultare familiare a chiunque abbia esperienza nella scrittura di HTML o JSX](#differenze-tra-astro-e-jsx) e aggiunge il supporto per includere componenti ed espressioni JavaScript. - - -## Espressioni simili a JSX - -Puoi definire variabili JavaScript locali all'interno dello script del componente frontmatter tra i due separatori del codice (`---`) di un componente Astro. Puoi quindi inserire queste variabili nel modello HTML del componente utilizzando espressioni simili a JSX! - -:::note[Dinamico vs reattivo] -Utilizzando questo approccio, puoi includere valori **dinamici** calcolati nel frontmatter. Ma una volta inclusi, questi valori non sono **reattivi** e non cambieranno mai. I componenti Astro sono modelli che vengono eseguiti solo una volta, durante la fase di rendering. - -Vedi sotto per ulteriori esempi di [differenze tra Astro e JSX](#differenze-tra-astro-e-jsx). -::: - -### Variabili - -Le variabili locali possono essere aggiunte all'HTML utilizzando la sintassi delle parentesi graffe: - -```astro title="src/components/Variables.astro" "{name}" ---- -const name = "Astro"; ---- -
-

Hello {name}!

-
-``` - -### Attributi dinamici - -Le variabili locali possono essere utilizzate tra parentesi graffe per passare i valori degli attributi sia agli elementi che ai componenti HTML: - -```astro title="src/components/DynamicAttributes.astro" "{name}" "${name}" ---- -const name = "Astro"; ---- -

Attribute expressions are supported

- - -``` - -:::caution -Gli attributi HTML verranno convertiti in stringhe, quindi non è possibile passare funzioni e oggetti agli elementi HTML. -Ad esempio, non puoi assegnare un gestore eventi a un elemento HTML in un componente Astro: - -```astro title="non-fare-questo.astro" ---- -function handleClick () { - console.log("button clicked!"); -} ---- - - -``` - -Utilizza invece uno script lato client per aggiungere il gestore eventi, come faresti in JavaScript puro: - -```astro title="fai-questo-invece.astro" ---- ---- - - -``` -::: - -### HTML dinamico - -Le variabili locali possono essere utilizzate in funzioni simili a JSX per produrre elementi HTML generati dinamicamente: - -```astro title="src/components/DynamicHtml.astro" "{item}" ---- -const items = ["Dog", "Cat", "Platypus"]; ---- -
    - {items.map((item) => ( -
  • {item}
  • - ))} -
-``` - -Astro può visualizzare in modo condizionale l'HTML utilizzando gli operatori logici JSX e le espressioni ternarie. - -```astro title="src/components/ConditionalHtml.astro" "visible" ---- -const visible = true; ---- -{visible &&

Show me!

} - -{visible ?

Show me!

:

Else show me!

} -``` - -### Tag dinamici - -Puoi anche utilizzare tag dinamici impostando una variabile sul nome di un tag HTML o sull'importazione di un componente: - -```astro title="src/components/DynamicTags.astro" /Element|(?Hello! - -``` - -Quando si utilizzano tag dinamici: - -- **I nomi delle variabili devono essere scritti in maiuscolo.** Ad esempio, utilizza `Element`, non `element`. Altrimenti, Astro proverà a rendere il nome della tua variabile come un tag HTML letterale. - -- **Le direttive di idratazione non sono supportate.** Quando si utilizzano le [direttive di idratazione `client:*`](/it/guides/framework-components/#componenti-interattivi-idratanti), Astro deve sapere quali componenti raggruppare per la produzione e il modello di tag dinamico ne impedisce il funzionamento. - -### Frammenti - -Astro supporta l'uso di ` ` o della abbreviazione `<> `. - -I frammenti possono essere utili per evitare elementi wrapper quando si aggiungono [direttive `set:*`](/it/reference/directives-reference/#sethtml), come nell'esempio seguente: - -```astro title="src/components/SetHtml.astro" "Fragment" ---- -const htmlString = '

Raw HTML content

'; ---- - -``` - -### Differenze tra Astro e JSX - -La sintassi del componente Astro è un superset di HTML. È stato progettato per risultare familiare a chiunque abbia esperienza con HTML o JSX, ma ci sono un paio di differenze fondamentali tra i file ".astro" e JSX. - -#### Attributi - -In Astro, utilizzi il formato standard "kebab-case" per tutti gli attributi HTML invece del formato "camelCase" utilizzato in JSX. Funziona anche per "class", che non è supportato da React. - -```jsx del={1} ins={2} title="example.astro" -
-
-``` - -#### Elementi multipli - -Un modello di componente Astro può eseguire il rendering di più elementi senza la necessità di racchiudere tutto in un singolo `
` o `<>`, a differenza di JavaScript o JSX. - -```astro title="src/components/RootElements.astro" ---- -// Template with multiple elements ---- -

No need to wrap elements in a single containing element.

-

Astro supports multiple root elements in a template.

-``` - -#### Commenti - -In Astro, puoi utilizzare commenti HTML standard o commenti in stile JavaScript. - -```astro title="example.astro" ---- ---- - -{/* JS comment syntax is also valid */} -``` - -:::caution -I commenti in stile HTML verranno inclusi nel DOM del browser, mentre quelli JS verranno saltati. Per lasciare messaggi TODO o altre spiegazioni riservate allo sviluppo, potresti invece voler utilizzare commenti in stile JavaScript. -::: - - diff --git a/src/content/docs/it/tutorial/2-pages/3.mdx b/src/content/docs/it/tutorial/2-pages/3.mdx index 08c8bcfb8e73d..b1f2f0d540402 100644 --- a/src/content/docs/it/tutorial/2-pages/3.mdx +++ b/src/content/docs/it/tutorial/2-pages/3.mdx @@ -283,4 +283,4 @@ Per ogni espressione del template Astro, puoi prevedere l'HTML (se presente!) ch ### Risorse -- [Espressioni dinamiche in Astro](/it/reference/astro-syntax/#espressioni-simili-a-jsx) +- [Espressioni dinamiche in Astro](/it/reference/astro-syntax/#jsx-like-expressions) diff --git a/src/content/docs/it/tutorial/2-pages/4.mdx b/src/content/docs/it/tutorial/2-pages/4.mdx index 77f492a537245..8b0314f7dcb5e 100644 --- a/src/content/docs/it/tutorial/2-pages/4.mdx +++ b/src/content/docs/it/tutorial/2-pages/4.mdx @@ -199,7 +199,7 @@ const textCase = "uppercase"; ### Risorse -- [Sintassi Astro vs JSX - confronto](/it/reference/astro-syntax/#differenze-tra-astro-e-jsx) +- [Sintassi Astro vs JSX - confronto](/it/reference/astro-syntax/#differences-between-astro-and-jsx) - [Tag `