diff --git a/src/content/docs/es/basics/astro-components.mdx b/src/content/docs/es/basics/astro-components.mdx index 8605428a47cea..d76f6052a153e 100644 --- a/src/content/docs/es/basics/astro-components.mdx +++ b/src/content/docs/es/basics/astro-components.mdx @@ -17,7 +17,7 @@ Los componentes de Astro son extremadamente flexibles. Un componente de Astro pu Lo más importante que hay que saber sobre los componentes de Astro es que **no se renderizan en el cliente**. Se renderizan en HTML en el momento de la compilación o bajo demanda. Puedes incluir código JavaScript dentro del frontmatter de tu componente, y todo será eliminado de la página final enviada a los navegadores de tus usuarios. El resultado es un sitio más rápido, sin ninguna huella de JavaScript añadida por defecto. -Cuando tu componente Astro necesite interactividad en el lado del cliente, puedes añadir [etiquetas HTML estándar ` - -``` - -## Configuración - - -1. Crea una carpeta de administración estática en `public/admin/` - -2. Agrega `config.yml` a `public/admin/`: - - - public - - admin - - config.yml - - -3. Para agregar soporte para colecciones de contenido, configura cada esquema en `config.yml`. El siguiente ejemplo configura una colección `blog`, definiendo una `etiqueta` para la propiedad frontmatter de cada entrada: - ```yml title="/public/admin/config.yml" - collections: - - name: "blog" # Usado en rutas, por ejemplo, /admin/collections/blog - label: "Blog" # Usado en la interfaz de usuario - folder: "src/content/blog" # La ruta a la carpeta donde se almacenan los documentos - create: true # Permitir a los usuarios crear nuevos documentos en esta colección - fields: # Los campos para cada documento, generalmente al principio - - { label: "Layout", name: "layout", widget: "hidden", default: "blog" } - - { label: "Title", name: "title", widget: "string" } - - { label: "Publish Date", name: "date", widget: "datetime" } - - { label: "Featured Image", name: "thumbnail", widget: "image" } - - { label: "Rating (scale of 1-5)", name: "rating", widget: "number" } - - { label: "Body", name: "body", widget: "markdown" } - ``` - -4. Agregar la ruta `admin` para tu aplicación React. Este archivo puede ser `public/admin/index.html` junto con `config.yml` o, si prefieres utilizar una ruta de Astro, `src/pages/admin.astro`. - - - public - - admin - -config.yml - - index.html - - ```html title="/public/admin/index.html" {7, 11} - - - - - - - - Administrador de contenidos - - - - - - ``` - -5. Para habilitar la carga de medios a una carpeta específica a través del editor de Decap, agrega una ruta adecuada: - ```yml title="/public/admin/config.yml" - media_folder: "src/assets/images" # Ubicación donde se almacenarán los archivos en el repositorio - public_folder: "src/assets/images" # El atributo src para los medios cargados - ``` - - -Consulta la [documentación de configuración de Decap CMS](https://decapcms.org/docs/configure-decap-cms/) para obtener instrucciones y opciones completas. - -## Uso -Navega hasta `yoursite.com/admin/` para usar el editor de Decap CMS. - -## Autenticación - -### Decap CMS con Netlify Identity - -Decap CMS fue desarrollado originalmente por Netlify y tiene soporte de primera clase para [Netlify Identity](https://docs.netlify.com/security/secure-access-to-sites/identity/). - -Cuando despliegues en netlify, configura la identidad para tu proyecto a través del panel de Netlify e incluye el [Netlify Identity Widget](https://github.com/netlify/netlify-identity-widget) en la ruta `admin` de tu proyecto. Opcionalmente, incluye el widget de identidad en la página de inicio de tu sitio si planeas invitar a nuevos usuarios por correo electrónico. - -### Decap CMS con clientes OAuth externos - -Cuando despliegues en proveedores de hosting distintos de Netlify, debes crear tus propias rutas OAuth. - -En Astro, esto se puede hacer con rutas renderizadas bajo demanda en tu proyecto configurado con la [salida `server`](/es/guides/on-demand-rendering/) activada. - -Consulta los [Documentos OAuth de Decap](https://decapcms.org/docs/external-oauth-clients/) para obtener una lista de clientes OAuth compatibles mantenidos por la comunidad. - -## Recursos de la comunidad - -- Plantilla de identidad de Netlify: [astro-decap-ssg-netlify](https://github.com/OliverSpeir/astro-decap-ssg-netlify-identity) - -- Representación bajo demanda de rutas Oauth con plantilla Astro: [astro-decap-starter-ssr](https://github.com/OliverSpeir/astro-decap-starter-ssr) - -- Publicación de blog: [Crea el contenido de tu sitio Astro con CMS basados en Git] (https://aalam.vercel.app/blog/astro-and-git-cms-netlify) por Aftab Alam - -- Tutorial de Youtube: [¡Crea un blog personalizado con Astro y NetlifyCMS en MINUTOS!](https://www.youtube.com/watch?v=3yip2wSRX_4) por Kumail Pirzada - -## Sitios en producción - -Los siguientes sitios usan Astro + Decap CMS en producción: - -- [yunielacosta.com](https://www.yunielacosta.com/) por Yuniel Acosta - [código fuente en GitHub](https://github.com/yacosta738/yacosta738.github.io) (Netlify CMS) -- [portfolioris.nl](https://www.portfolioris.nl/) por Joris Hulsbosch – [código fuente en GitHub](https://github.com/portfolioris/portfolioris.nl) - -## Temas - - - - - - diff --git a/src/content/docs/es/guides/cms/directus.mdx b/src/content/docs/es/guides/cms/directus.mdx deleted file mode 100644 index ae774c826e60b..0000000000000 --- a/src/content/docs/es/guides/cms/directus.mdx +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Directus y Astro -description: Agrega contenido a tu proyecto de Astro utilizando Directus como CMS. -type: cms -stub: true -service: Directus -i18nReady: true ---- - -[Directus](https://directus.io/) es un backend como servicio que se puede utilizar para alojar datos y contenido para tu proyecto de Astro. - -## Recursos oficiales - -- [Empezando con Directus y Astro](https://docs.directus.io/blog/getting-started-directus-astro.html). - -## Recursos de la comunidad - -- ¡Agrega el tuyo! diff --git a/src/content/docs/es/guides/cms/drupal.mdx b/src/content/docs/es/guides/cms/drupal.mdx index 812f265317e1c..332c13cf9282c 100644 --- a/src/content/docs/es/guides/cms/drupal.mdx +++ b/src/content/docs/es/guides/cms/drupal.mdx @@ -419,7 +419,7 @@ Con la configuración anterior, ahora puedes crear un blog que use Drupal como C Usa el mismo método para obtener tus datos de Drupal como arriba, pero esta vez, en una página que creará una ruta de página única para cada artículo. -Este ejemplo utiliza el modo estático predeterminado de Astro y crea [un archivo de página de enrutamiento dinámico](/es/guides/routing/#rutas-dinámicas) con la función `getStaticPaths()`. Esta función se llamará en tiempo de compilación para generar la lista de rutas que se convierten en páginas. +Este ejemplo utiliza el modo estático predeterminado de Astro y crea [un archivo de página de enrutamiento dinámico](/es/guides/routing/#dynamic-routes) con la función `getStaticPaths()`. Esta función se llamará en tiempo de compilación para generar la lista de rutas que se convierten en páginas. 1. Crea un nuevo archivo `src/pages/articles/[path].astro` e importa la interfaz `DrupalNode` y `getArticle()` desde `src/api/drupal.ts`. Obtén tus datos dentro de una función `getStaticPaths()` para crear rutas para tu blog. diff --git a/src/content/docs/es/guides/cms/frontmatter-cms.mdx b/src/content/docs/es/guides/cms/frontmatter-cms.mdx deleted file mode 100644 index fe339f13919ba..0000000000000 --- a/src/content/docs/es/guides/cms/frontmatter-cms.mdx +++ /dev/null @@ -1,192 +0,0 @@ ---- -title: Front Matter CMS y Astro -description: Añade contenido a tu proyecto Astro usando Front Matter CMS -type: cms -service: Front Matter CMS -i18nReady: true ---- -import { FileTree } from '@astrojs/starlight/components'; - -[Front Matter CMS](https://frontmatter.codes/) trae el CMS a tu editor, se ejecuta dentro de Visual Studio Code, GitPod y muchos más. - -## Integración con Astro - -En esta sección, veremos cómo agregar Front Matter CMS a tu proyecto de Astro. - -### Prerrequistos - -- Visual Studio Code -- Usa la [plantilla de Astro Blog](https://github.com/withastro/astro/tree/main/examples/blog) para proporcionar la configuración base y el contenido de ejemplo para comenzar con Front Matter CMS. - -### Instala la extensión de Front Matter CMS - -Puedes obtener la extensión desde la [Plataforma de Visual Studio Code - Front Matter](https://marketplace.visualstudio.com/items?itemName=eliostruyf.vscode-front-matter) o haciendo clic en el siguiente enlace: [abrir la extensión de Front Matter CMS en VS Code](vscode:extension/eliostruyf.vscode-front-matter) - -### Inicialización del proyecto - -Una vez instalado Front Matter CMS, obtendrás un nuevo icono en la barra de actividad. Se abrirá el panel **Front Matter CMS** en la barra lateral principal cuando hagas clic en él. Sigue los siguientes pasos para inicializar tu proyecto: - -- Haz clic en el botón **Initialize project** en el panel de Front Matter -- La pantalla de bienvenida se abrirá y podrás comenzar a inicializar el proyecto -- Haz clic en el primer paso para **Initialize project** -- Como Astro es uno de los frameworks soportados, puedes seleccionarlo de la lista -- Registra tus carpetas de contenido, en este caso, la carpeta `src/content/blog`. - - :::note - El registro de la carpeta es necesario para que Front Matter CMS sepa dónde puede encontrar y crear tu contenido. Puedes tener varios tipos de carpetas como páginas, blog, docs y muchos más. - ::: - -- Se te pedirá que introduzcas el nombre de la carpeta. De forma predeterminada, toma el nombre de la carpeta. - - :::note - El nombre se usa durante el proceso de creación de nuevo contenido. Por ejemplo, tener varios registros de carpetas te permite elegir el tipo de contenido que deseas crear. - ::: - -- Haz clic en **Start the dashboard** para abrir el panel de contenido - - :::tip - Una vez que Front Matter CMS es inicializado, puedes abrir el panel de contenido de las siguientes maneras: - - - Usando los combinaciones del teclado: alt + d (Windows & Linux) o options + d (macOS) - - Abre la paleta de comandos y busca `Front Matter: Open dashboard` - - Haz clic en el icono de **Front Matter** en la barra de título del panel o en los archivos. - ::: - -### Configuración del proyecto - -Una vez que el proyecto esté inicializado, obtendrás un archivo de configuración `frontmatter.json` y una carpeta `.frontmatter` en la raíz de tu proyecto. - - -- .frontmatter/ - - database/ - - mediaDb.json -- src/ -- astro.config.mjs -- **frontmatter.json** -- package.json - - -#### Configuración del tipo de contenido - -Los tipos de contenido(content-types) son la forma en que Front Matter CMS gestiona tu contenido. Cada tipo de contenido contiene un conjunto de campos, que se pueden definir por tipo de contenido que deseas usar para tu sitio web. - -Los campos corresponden al front matter de tu contenido de página. - -Puedes configurar los tipos de contenido en el archivo `frontmatter.json`. - -- Abre el archivo `frontmatter.json` -- Reemplaza el arreglo `frontMatter.taxonomy.contentTypes` con la siguiente configuración de tipos de contenido: - -```json title="frontmatter.json" -"frontMatter.taxonomy.contentTypes": [ - { - "name": "default", - "pageBundle": false, - "previewPath": "'blog'", - "filePrefix": null, - "fields": [ - { - "title": "Title", - "name": "title", - "type": "string", - "single": true - }, - { - "title": "Description", - "name": "description", - "type": "string" - }, - { - "title": "Publishing date", - "name": "pubDate", - "type": "datetime", - "default": "{{now}}", - "isPublishDate": true - }, - { - "title": "Content preview", - "name": "heroImage", - "type": "image", - "isPreviewImage": true - } - ] - } -] -``` - -:::note -Esta configuración asegura que el tipo de contenido de Front Matter coincida con el esquema de la colección de contenido de la plantilla de blog de Astro. -::: - -:::tip -Puedes encontraar más información sobre los tipos de contenido y los campos soportados en la [sección de documentación de creación de contenido](https://frontmatter.codes/docs/content-creation) de Front Matter CMS. -::: - -### Previsualiza tus artículos en el editor - -Desde el panel de **Front Matter CMS**, haz clic en el botón **Start server**. Esta acción inicia el servidor de desarrollo local de Astro. Una vez en ejecución, puedes abrir el panel de contenido, seleccionar uno de los artículos y hacer clic en el botón **Open preview** para abrir el artículo en el editor. - -### Crea nuevos artículos - -Abre el **Front Matter CMS Dashboard**; puedes hacerlo de la siguiente manera: - -- Abre el panel de contenido de Front Matter CMS -- Haz clic en el botón **Create new article** -- Front Matter te preguntará por el título del artículo. Rellénalo y pulsa enter -- Tu nuevo artículo será creado y abierto en el editor. Puedes empezar a escribir tu artículo. - -### Usando Markdoc con Front Matter CMS - -Para usar Markdoc con Front Matter CMS, debes configurarlo en `frontMatter.content.supportedFileTypes`. Esta configuración le permite al CMS saber qué tipos de archivos puede procesar. - -Puedes configurar la opción de la siguiente manera: - -```json title="frontmatter.json" -"frontMatter.content.supportedFileTypes": [ "md", "markdown", "mdx", "mdoc" ] -``` - -Para permitir que el contenido se cree como Markdoc, especifica la propiedad `fileType` en el tipo de contenido. - -```json title="frontmatter.json" ins={7} -"frontMatter.taxonomy.contentTypes": [ - { - "name": "default", - "pageBundle": false, - "previewPath": "'blog'", - "filePrefix": null, - "fileType": "mdoc", - "fields": [ - { - "title": "Title", - "name": "title", - "type": "string", - "single": true - }, - { - "title": "Description", - "name": "description", - "type": "string" - }, - { - "title": "Publishing date", - "name": "pubDate", - "type": "datetime", - "default": "{{now}}", - "isPublishDate": true - }, - { - "title": "Content preview", - "name": "heroImage", - "type": "image", - "isPreviewImage": true - } - ] - } -] -``` - -## Recursos oficiales - -- [Front Matter CMS](https://frontmatter.codes/) -- [Front Matter CMS - Documentación](https://frontmatter.codes/docs/) -- [Empezando con Astro y Front Matter CMS](https://youtu.be/xb6pZiier_E) diff --git a/src/content/docs/es/guides/cms/ghost.mdx b/src/content/docs/es/guides/cms/ghost.mdx deleted file mode 100644 index 31027842b1063..0000000000000 --- a/src/content/docs/es/guides/cms/ghost.mdx +++ /dev/null @@ -1,298 +0,0 @@ ---- -title: Ghost y Astro -description: Agrega contenido a tu proyecto Astro usando Ghost como CMS -type: cms -stub: false -service: Ghost -i18nReady: true ---- - -import { FileTree } from '@astrojs/starlight/components'; -import PackageManagerTabs from '~/components/tabs/PackageManagerTabs.astro' - -[Ghost](https://github.com/TryGhost/Ghost) es un sistema de gestión de contenido de código abierto, headless y construido en Node.js. - -## Integración con Astro -En esta sección, usaremos la [API de contenido de Ghost](https://ghost.org/docs/content-api/) para traer tus datos a tu proyecto Astro. - -### Prerrequisitos -Para comenzar, necesitarás lo siguiente: - -1. **Un proyecto Astro** - Si aún no tienes un proyecto Astro, nuestra [guía de instalación](/es/install-and-setup/) te ayudará a comenzar en cuestión de minutos. - -2. **Un sitio Ghost** - Se supone que tienes un sitio configurado con Ghost. Si no, puedes configurar uno en un [entorno local.](https://ghost.org/docs/install/local/) - -3. **Llave API de contenido** - Puedes crear una integración en la sección `Configuración > Integraciones` de tu sitio. Desde allí puedes encontrar tu `Llave API de contenido`. - - -### Configuración de credenciales - -Para agregar las credenciales de tu sitio a Astro, crea un archivo `.env` en la raíz de tu proyecto con la siguiente variable: - - -```ini title=".env" -CONTENT_API_KEY=TU_LLAVE_API -``` - -Ahora, deberías poder usar esta variable de entorno en tu proyecto. - -Si quisieras tener IntelliSense para tu variable de entorno, puedes crear un archivo `env.d.ts` en el directorio `src/` y configurar `ImportMetaEnv` de la siguiente manera: - -```ts title="src/env.d.ts" -interface ImportMetaEnv { - readonly CONTENT_API_KEY: string; -} -``` -:::tip -Lee más sobre [usar variables de entorno](/es/guides/environment-variables/) y archivos `.env` en Astro. -::: - -Tu directorio raíz ahora debería incluir estos nuevos archivos: - - -- src/ - - **env.d.ts** -- **.env** -- astro.config.mjs -- package.json - - -### Instalación de dependencias - -Para conectar con Ghost, instala el paquete oficial [`@tryghost/content-api`](https://www.npmjs.com/package/@tryghost/content-api) usando el comando de tu gestor de paquetes preferido y opcionalmente un paquete útil que contiene definiciones de tipo si estás usando TypeScript: - - - - ```shell - npm install @tryghost/content-api - npm install --save @types/tryghost__content-api - ``` - - - ```shell - pnpm add @tryghost/content-api - pnpm add --save-dev @types/tryghost__content-api - ``` - - - ```shell - yarn add @tryghost/content-api - yarn add --dev @types/tryghost__content-api - ``` - - - -## Creando un blog con Astro y Ghost - -Con la configuación de arriba, ahora puedes crear un blog que use Ghost como CMS. - -### Prerrequisitos - -1. Un blog Ghost. -2. Un proyecto Astro integrado con la [API de contenido de Ghost](https://www.npmjs.com/package/@tryghost/content-api) - Consulta [integración con Astro](/es/guides/cms/ghost/#integración-con-astro) para obtener más detalles sobre cómo configurar un proyecto Astro con Ghost. - -Este ejemplo creará una página de índice que enumere las publicaciones con enlaces a páginas de publicaciones individuales generadas dinámicamente. - -### Obteniendo datos - -Puedes obtener los datos de tu sitio con el paquete de la API de contenido de Ghost. - -Primero, crea un archivo `ghost.ts` dentro de un directorio `lib`. - - -- src/ - - lib/ - - **ghost.ts** - - pages/ - - index.astro -- astro.config.mjs -- package.json - - -Inicializa una instancia de API con la API de Ghost usando la llave API de la página de Integraciones del panel de control de Ghost. - -```ts title="src/lib/ghost.ts" - -import GhostContentAPI from '@tryghost/content-api'; - -// Crea una instancia de API con las credenciales del sitio -export const ghostClient = new GhostContentAPI({ - url: 'http://127.0.0.1:2368', // Esto es la URL predeterminada si tu sitio se está ejecutando en un entorno local - key: import.meta.env.CONTENT_API_KEY, - version: 'v5.0', -}); - -``` - - -### Mostrando una lista de publicaciones - -La página `src/pages/index.astro` mostrará una lista de publicaciones, cada una con una descripción y un enlace a su propia página. - - - -- src/ - - lib/ - - ghost.ts - - pages/ - - **index.astro** -- astro.config.mjs -- package.json - - -Impora `ghostClient()` en el frontmatter de Astro para usar el método `posts.browse()` para acceder a las publicaciones del blog de Ghost. Establece `limit: all` para recuperar todas las publicaciones. - -```astro title="src/pages/index.astro" ---- -import { ghostClient } from '../lib/ghost'; -const posts = await ghostClient.posts - .browse({ - limit: 'all', - }) - .catch((err) => { - console.error(err); - }); ---- -``` - -Obteniendo los datos a través de la API de contenido devuelve un arreglo de objetos que contiene las [propiedades de cada publicación](https://ghost.org/docs/content-api/#posts) como: -- `title` - el título de la publicación -- `html` - la representación HTML del contenido de la publicación -- `feature_image` - la URL de origen de la imagen destacada de la publicación -- `slug` - el slug de la publicación - -Usa el arreglo `posts` devuelto de la petición para mostrar una lista de publicaciones en la página. - - -```astro title="src/pages/index.astro" ---- -import { ghostClient } from '../lib/ghost'; -const posts = await ghostClient.posts - .browse({ - limit: 'all', - }) - .catch((err) => { - console.error(err); - }); ---- - - - - Astro + Ghost 👻 - - - - { - posts.map((post) => ( - -

{post.title}

-
- )) - } - - -``` - -### Generando páginas - -La página `src/pages/post/[slug].astro` [genera dinámicamente una página](/es/guides/routing/#rutas-dinámicas) para cada publicación. - - -- src/ - - lib/ - - ghost.ts - - pages/ - - index.astro - - post/ - - **[slug].astro** -- astro.config.mjs -- package.json - - -Importa `ghostClient()` para acceder a las publicaciones del blog usando `posts.browse()` y devuelve una publicación como props a cada una de tus rutas dinámicas. - -```astro title="src/pages/post/[slug].astro" ---- -import { ghostClient } from '../../lib/ghost'; - -export async function getStaticPaths() { - const posts = await ghostClient.posts - .browse({ - limit: 'all', - }) - .catch((err) => { - console.error(err); - }); - - return posts.map((post) => { - return { - params: { - slug: post.slug, - }, - props: { - post: post, - }, - }; - }); -} - -const { post } = Astro.props; ---- -``` - -Crea la plantilla para cada página usando las propiedades de cada objeto `post`. - -```astro title="src/pages/post/[slug].astro" ins={24-37} ---- -import { ghostClient } from '../../lib/ghost'; -export async function getStaticPaths() { - const posts = await ghostClient.posts - .browse({ - limit: 'all', - }) - .catch((err) => { - console.error(err); - }); - return posts.map((post) => { - return { - params: { - slug: post.slug, - }, - props: { - post: post, - }, - }; - }); -} -const { post } = Astro.props; ---- - - - - {post.title} - - - {post.title} - -

{post.title}

-

{post.reading_time} min read

- - - - -``` -:::note -`` es un componente integrado de Astro que te permite evitar un elemento envoltorio innecesario. Esto puede ser especialmente útil al recuperar HTML de un CMS (por ejemplo, Ghost o [WordPress](/es/guides/cms/wordpress/)). -::: - -### Publicando tu sitio -Para desplegar tu sitio visita nuestra [guía de despliegue](/es/guides/deploy/) y sigue las instrucciones de tu proveedor de hosting preferido. - -## Recursos de la comunidad - -- [`astro-starter-ghost`](https://github.com/PhilDL/astro-starter-ghost) en GitHub -- [`astro-ghostcms`](https://github.com/MatthiesenXYZ/astro-ghostcms) en GitHub -- [Astro + Ghost + Tailwind CSS](https://andr.ec/posts/astro-ghost-blog/) por Andre Carrera -- [Tutorial de Ghost CMS y Astro](https://matthiesen.xyz/blog/astro-ghostcms) por Adam Matthiesen - - diff --git a/src/content/docs/es/guides/cms/hashnode.mdx b/src/content/docs/es/guides/cms/hashnode.mdx deleted file mode 100644 index 48cde1308451b..0000000000000 --- a/src/content/docs/es/guides/cms/hashnode.mdx +++ /dev/null @@ -1,353 +0,0 @@ ---- -title: Hashnode & Astro -description: Agrega contenido a tu proyecto de Astro usando Hashnode como un CMS -type: cms -stub: false -service: Hashnode -i18nReady: true ---- - -import { FileTree } from '@astrojs/starlight/components'; -import PackageManagerTabs from '~/components/tabs/PackageManagerTabs.astro' -import { Steps } from '@astrojs/starlight/components'; - -[Hashnode](https://hashnode.com/) es un CMS alojado que te permite crear un blog o publicación. - -## Integración con Astro -La [API Pública de hashnode](https://apidocs.hashnode.com/) es una API GraphQL que te permite interactuar con Hashnode. Esta guía utiliza [`graphql-request`](https://github.com/jasonkuhrt/graphql-request), un cliente GraphQL minimalista que funciona bien con Astro, para traer tus datos de Hashnode a tu proyecto de Astro. - -### Prerrequisitos -Para comenzar necesitarás tener lo siguiente: - -1. **Un proyecto de Astro** - Si aún no tienes un proyecto de Astro, nuestra [Guía de Instalación](/es/install-and-setup/) te ayudará a empezar en poco tiempo. - -2. **Un sitio en Hashnode** - Puedes crear un sitio personal gratuito visitando [Hashnode](https://hashnode.com/). - -### Instalando dependencias - -Instala el paquete `graphql-request` usando el gestor de paquetes de tu elección: - - - - ```shell - npm install graphql-request - ``` - - - ```shell - pnpm add graphql-request - ``` - - - ```shell - yarn add graphql-request - ``` - - - -## Haciendo un blog con Astro y Hashnode - -Esta guía usa [`graphql-request`](https://github.com/jasonkuhrt/graphql-request), un cliente GraphQL minimalista que funciona bien con Astro, para traer tus datos de Hashnode a tu proyecto de Astro. - -### Requisitos Previos - -1. Un blog de Hashnode. -2. Un proyecto de Astro integrado con el paquete [graphql-request](https://github.com/jasonkuhrt/graphql-request) instalado. - -Este ejemplo creará una página de índice que lista las publicaciones con enlaces a páginas individuales generadas dinámicamente. - -### Obteniendo Datos - - -1. Para obtener los datos de tu sitio con el paquete `graphql-request`, crea un directorio `src/lib` y crea dos archivos nuevos: `client.ts` & `schema.ts`: - - - - src/ - - lib/ - - **client.ts** - - **schema.ts** - - pages/ - - index.astro - - astro.config.mjs - - package.json - - -2. Inicializa una instancia de API con GraphQLClient utilizando la URL de tu sitio web de Hashnode. - - ```ts title="src/lib/client.ts" "astroplayground.hashnode.dev" - - import { gql, GraphQLClient } from "graphql-request"; - import type { AllPostsData, PostData } from "./schema"; - - export const getClient = () => { - return new GraphQLClient("https://gql.hashnode.com") - } - - const myHashnodeURL = "astroplayground.hashnode.dev"; - - export const getAllPosts = async () => { - const client = getClient(); - - const allPosts = await client.request( - gql` - query allPosts { - publication(host: "${myHashnodeURL}") { - title - posts(first: 20) { - pageInfo{ - hasNextPage - endCursor - } - edges { - node { - author{ - name - profilePicture - } - title - subtitle - brief - slug - coverImage { - url - } - tags { - name - slug - } - publishedAt - readTimeInMinutes - } - } - } - } - } - ` - ); - - return allPosts; - }; - - - export const getPost = async (slug: string) => { - const client = getClient(); - - const data = await client.request( - gql` - query postDetails($slug: String!) { - publication(host: "${myHashnodeURL}") { - post(slug: $slug) { - author{ - name - profilePicture - } - publishedAt - title - subtitle - readTimeInMinutes - content{ - html - } - tags { - name - slug - } - coverImage { - url - } - } - } - } - `, - { slug: slug } - ); - - return data.publication.post; - }; - - ``` - -3. Configura un `schema.ts` para definir la estructura de los datos devueltos por la API de hashnode. - - ```ts title="src/lib/schema.ts" - - import { z } from "astro/zod"; - - export const PostSchema = z.object({ - author: z.object({ - name: z.string(), - profilePicture: z.string(), - }), - publishedAt: z.string(), - title: z.string(), - subtitle: z.string(), - brief: z.string(), - slug: z.string(), - readTimeInMinutes: z.number(), - content: z.object({ - html: z.string(), - }), - tags: z.array(z.object({ - name: z.string(), - slug: z.string(), - })), - coverImage: z.object({ - url: z.string(), - }), - }) - - export const AllPostsDataSchema = z.object({ - publication: z.object({ - title: z.string(), - posts: z.object({ - pageInfo: z.object({ - hasNextPage: z.boolean(), - endCursor: z.string(), - }), - edges: z.array(z.object({ - node: PostSchema, - })), - }), - }), - }) - - export const PostDataSchema = z.object({ - publication: z.object({ - title: z.string(), - post: PostSchema, - }), - }) - - export type Post = z.infer - export type AllPostsData = z.infer - export type PostData = z.infer - - ``` - - -### Mostrando una lista de publicaciones - -Obtener mediante `getAllPosts()` devuelve un array de objetos que contiene las propiedades de cada publicación, tales como: -- `title` - El título de la publicación -- `brief` - La representación HTML del contenido de la publicación -- `coverImage.url` - La URL de origen de la imagen destacada de la publicación -- `slug` - El slugh de la publicación - -Utiliza el array `posts` que devuelve la consulta para mostrar una lista de publicaciones de blog en la página. - -```astro title="src/pages/index.astro" ---- -import { getAllPosts } from '../lib/client'; - -const data = await getAllPosts(); -const allPosts = data.publication.posts.edges; - ---- - - - - Astro + Hashnode - - - - { - allPosts.map((post) => ( -
-

{post.node.title}

-

{post.node.brief}

- {post.node.title} - Read more -
- )) - } - - -``` - -### Generando páginas - - -1. Crea la página `src/pages/post/[slug].astro` para [generar dinámicamente una página](/es/guides/routing/#rutas-dinámicas) para cada publicación. - - - - src/ - - lib/ - - client.ts - - schema.ts - - pages/ - - index.astro - - post/ - - **[slug].astro** - - astro.config.mjs - - package.json - - -2. Importa y utliza `getAllPosts()` y `getPost()`para obtener los datos de Hashnode y generar rutas de página individuales para cada publicación. - - ```astro title="src/pages/post/[slug].astro" - --- - import { getAllPosts, getPost } from '../../lib/client'; - - - export async function getStaticPaths() { - const data = await getAllPosts(); - const allPosts = data.publication.posts.edges; - return allPosts.map((post) => { - return { - params: { slug: post.node.slug }, - } - }) - } - const { slug } = Astro.params; - const post = await getPost(slug); - - --- - ``` - -3. Crea la plantilla para cada página usando las propiedades de cada objeto `post`. El ejemplo de abajo muestra el título de la publicación y tiempo de lectura, luego el contenido completo de la publicación: - - ```astro title="src/pages/post/[slug].astro" - --- - import { getAllPosts, getPost } from '../../lib/client'; - - - export async function getStaticPaths() { - const data = await getAllPosts(); - const allPosts = data.publication.posts.edges; - return allPosts.map((post) => { - return { - params: { slug: post.node.slug }, - } - }) - } - const { slug } = Astro.params; - const post = await getPost(slug); - - --- - - - - {post.title} - - - {post.title} - -

{post.title}

-

{post.readTimeInMinutes} min read

- - - - - ``` - :::note - `` Es un componente integrado de Astro que te permite evitar un elemento de contenedor innecesario. Puede ser especialmente útil cuando recuperas HTML de un CMS (e.g. Hashnode o [WordPress](/es/guides/cms/wordpress/)). - ::: -
- -### Publicando tu sitio -Para desplegar tu sitio visita nuestra [guía de despliegue](/es/guides/deploy/) y sigue las instrucciones de tu proveedor de alojamiento preferido. - -## Recursos de la Comunidad - -- [`astro-hashnode`](https://github.com/matthiesenxyz/astro-hashnode) en GitHub - diff --git a/src/content/docs/es/guides/cms/hygraph.mdx b/src/content/docs/es/guides/cms/hygraph.mdx deleted file mode 100644 index be044830cc12d..0000000000000 --- a/src/content/docs/es/guides/cms/hygraph.mdx +++ /dev/null @@ -1,126 +0,0 @@ ---- -title: Hygraph y Astro -description: Agrega contenido a tu proyecto de Astro usando Hygraph como CMS -type: cms -service: Hygraph -i18nReady: true ---- -import { Steps } from '@astrojs/starlight/components'; -import { FileTree } from '@astrojs/starlight/components'; - -[Hygraph](https://hygraph.com/) es un gestor de contenido federado. Expone un endpoint de GraphQL para obtener contenido. - -## Integración con Astro - -En esta sección, crearás un [Hygraph](https://hygraph.com/) de GraphQL para obtener contenido con Astro. - -### Prerrequisitos - -Para empezar, necesitarás lo siguiente: - -1. **Una cuenta y un proyecto de Hygraph**. Si no tienes una cuenta, puedes [registrarte gratis](https://app.hygraph.com/signup) y crear un nuevo proyecto. - -2. **Permisos de acceso a Hygraph** - En `Project Settings > API Access`, configura los permisos de la API de contenido público para permitir solicitudes de lectura sin autenticación. Si no has configurado ningún permiso, puedes hacer clic en **Yes, initialize defaults** para agregar los permisos necesarios para usar la "API de contenido de alto rendimiento". - -### Configurando el endpoint - -Para agregar tu endpoint de Hygraph a Astro, crea un archivo `.env` en la raíz de tu proyecto con la siguiente variable: - -```ini title=".env" -HYGRAPH_ENDPOINT=TU_API_DE_ALTO_RENDIMIENTO -``` - -Ahora, deberías poder usar esta variable de entorno en tu proyecto. - -Si deseas tener IntelliSense para tus variables de entorno, puedes crear un archivo `env.d.ts` en el directorio `src/` y configurar `ImportMetaEnv` de esta manera: - -```ts title="src/env.d.ts" -interface ImportMetaEnv { - readonly HYGRAPH_ENDPOINT: string; -} -``` - -:::note -Lee más sobre [el uso de variables de entorno](/es/guides/environment-variables/) y archivos `.env` en Astro. -::: - -Tu directorio raíz ahora debería incluir estos nuevos archivos: - - -- src/ - - **env.d.ts** -- **.env** -- astro.config.mjs -- package.json - - -### Obteniendo datos - -Obtén los datos de tu proyecto de Hygraph usando `HYGRAPH_ENDPOINT`. - -Por ejemplo, para obtener las entradas de un tipo de contenido `blogPosts` que tiene un campo de tipo string `title`, crea una consulta GraphQL para obtener ese contenido. Luego, define el tipo de contenido y configúralo como el tipo de respuesta. - -```astro title="src/pages/index.astro" ---- -interface Post { - title: string; -} - -const query = { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ - query: ` - { - blogPosts { - title - } - }`, - }), -}; - -const response = await fetch(import.meta.env.HYGRAPH_ENDPOINT, query); -const json = await response.json(); -const posts: Post[] = json.data.blogPosts; ---- - - - - - - - - Astro - - -

Astro

- { - posts.map((post) => ( -
-

{post.title}

-
- )) - } - - -``` - -## Despliegue - -### Configurando el Webhook de Netlify - -Para configurar un webhook en Netlify: - - -1. Despliega tu sitio en Netlify con [esta guía](/es/guides/deploy/netlify/). Recuerda agregar tu `HYGRAPH_ENDPOINT` a las variables de entorno. - -2. Luego, ve al panel de control de tu proyecto de Hygraph y haz clic en **Apps**. - -3. Ve al marketplace y busca Netlify y sigue las instrucciones proporcionadas. - -4. Si todo salió bien, ahora puedes desplegar tu sitio web con un clic en la interfaz de Hygraph. - - -## Recursos de la comunidad - -- [Hygraph + ejemplo de Astro con `marked` para el análisis de Markdown](https://github.com/camunoz2/example-astrowithhygraph) diff --git a/src/content/docs/es/guides/cms/index.mdx b/src/content/docs/es/guides/cms/index.mdx deleted file mode 100644 index ee43e6046b41f..0000000000000 --- a/src/content/docs/es/guides/cms/index.mdx +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: Usa un CMS con Astro -description: Cómo usar un CMS para agregar contenido a Astro -i18nReady: true ---- -import CMSGuidesNav from '~/components/CMSGuidesNav.astro'; -import ReadMore from '~/components/ReadMore.astro'; -import Badge from "~/components/Badge.astro" - -**¿Listo para conectar un Headless CMS a tu proyecto Astro?** Sigue una de nuestras guías para integrar un CMS. - -:::tip -Encuentra [integraciones mantenidas por la comunidad](https://astro.build/integrations/?search=cms) para conectar un CMS a tu proyecto en nuestro directorio de integraciones. -::: - -## Guías de CMS - -Ten en cuenta que muchas de estas páginas son **talones**: ¡Son colecciones de recursos esperando tu contribución! - - - -## ¿Por qué usar un CMS? - -Un sistema de gestión de contenido te permite escribir contenido y administrar activos fuera de tu proyecto Astro. - -Esto desbloquea nuevas funciones para trabajar con contenido. La mayoría de los CMS te brindan un editor de contenido visual, la capacidad de especificar tipos de contenido estándar y una forma de colaborar con otros. - -Un CMS puede ser útil para el contenido que sigue una estructura particular, a menudo te brinda una experiencia de panel de control y herramientas de edición WYSIWYG (Lo que ves es lo que obtienes). Puedes usar un CMS para escribir publicaciones de blog usando el editor de texto enriquecido de un CMS en lugar de archivos Markdown. O puedes usar un CMS para mantener listados de productos para una tienda en línea, haciendo que ciertos campos sean obligatorios para evitar listados incompletos. - -Tu proyecto Astro luego puede obtener el contenido de tu CMS y mostrarlo, donde y como quieras en tu sitio. - - -## ¿Qué CMSes funcionan bien con Astro? - -Debido a que Astro se ocupa de la _presentación_ de tu contenido, procura elegir un CMS _headless_, como los de la lista anterior. Esto significa que el CMS te ayuda a escribir tu contenido, pero no genera un sitio que lo muestre. En su lugar, obtiene los datos de tu contenido y los usa en tu proyecto Astro. - -Algunos CMSes headless, como Storyblok, proporcionan una [integración](/es/guides/integrations-guide/) de Astro que te ayuda a recuperar el contenido específicamente para un sitio Astro. Otros proporcionan un SDK de JavaScript, una biblioteca que instalas y usas para recuperar tu contenido remoto. - - Explora una [lista de por lo menos 100 sistemas headless de manejo de contenido](https://jamstack.org/headless-cms/) donde puedes filtrar por tipo (por ejemplo basado en Git, manejado por API) y licencia (código abierto o código cerrado). - -## ¿Puedo usar Astro sin un CMS? - -¡Sí! Astro proporciona formas integradas para crear contenido, incluyendo el soporte para páginas de Markdown. diff --git a/src/content/docs/es/guides/cms/keystatic.mdx b/src/content/docs/es/guides/cms/keystatic.mdx deleted file mode 100644 index 540fd8e3bb6d3..0000000000000 --- a/src/content/docs/es/guides/cms/keystatic.mdx +++ /dev/null @@ -1,237 +0,0 @@ ---- -title: Keystatic y Astro -description: Agrega contenido a tu proyecto Astro usando Keystatic como CMS -type: cms -service: Keystatic -i18nReady: true ---- -import { Steps } from '@astrojs/starlight/components'; -import { FileTree } from '@astrojs/starlight/components'; -import PackageManagerTabs from '~/components/tabs/PackageManagerTabs.astro' - -[Keystatic](https://keystatic.com/) es un sistema de gestión de contenido de código abierto headless que te permite estructurar tu contenido y sincronizarlo con GitHub. - -:::tip -Si estás comenzando un **nuevo proyecto Astro + Keystatic desde cero**, puedes usar la [CLI de Keystatic](https://keystatic.com/docs/quick-start#keystatic-cli) para generar un nuevo proyecto en segundos: - - - - ```shell - npm create @keystatic@latest - ``` - - - ```shell - pnpm create @keystatic@latest - ``` - - - ```shell - yarn create @keystatic - ``` - - - -¡Selecciona la plantilla de Astro y estarás listo para [desplegar](#despliegue-de-keystatic--astro)! -::: - -## Prerrequisitos - -- Un proyecto existente de Astro [con renderizado del lado del servidor (SSR) y `output: 'hybrid'` o `output: 'server'` configurado](/es/guides/on-demand-rendering/). - -:::note -Si tienes la intención de sincronizar los datos de Keystatic con GitHub, también necesitarás **una cuenta de GitHub con permisos de `escritura`** en el repositorio de este proyecto. -::: - -## Instalación de dependencias - -Agrega tanto la integración de Markdoc (para las entradas de contenido) como la de React (para el panel de control de la interfaz de usuario de Keystatic) a tu proyecto Astro, usando el comando `astro add` para tu gestor de paquetes. - - - - ```shell - npx astro add react markdoc - ``` - - - ```shell - pnpm astro add react markdoc - ``` - - - ```shell - yarn astro add react markdoc - ``` - - - -También necesitarás dos paquetes de Keystatic: - - - - ```shell - npm install @keystatic/core @keystatic/astro - ``` - - - ```shell - pnpm add @keystatic/core @keystatic/astro - ``` - - - ```shell - yarn add @keystatic/core @keystatic/astro - ``` - - - -## Agregar la integración de Astro - -Agrega la integración de Astro desde `@keystatic/astro` en el archivo de configuración de Astro: - -```js ins={6} ins=", keystatic()" -// astro.config.mjs -import { defineConfig } from 'astro/config' - -import react from '@astrojs/react' -import markdoc from '@astrojs/markdoc' -import keystatic from '@keystatic/astro' - -// https://astro.build/config -export default defineConfig({ - integrations: [react(), markdoc(), keystatic()], - output: 'hybrid', -}) -``` - -## Crear un archivo de configuración de Keystatic - -Un archivo de configuración de Keystatic es necesario para definir el esquema de tu contenido. Este archivo también te permitirá conectar un proyecto a un repositorio específico de GitHub (si decides hacerlo). - -Crea un archivo llamado `keystatic.config.ts` en la raíz del proyecto y agrega el siguiente código para definir tanto el tipo de almacenamiento (`local`) como una sola colección de contenido (`posts`): - -```ts {8-25} -// keystatic.config.ts -import { config, fields, collection } from '@keystatic/core'; - -export default config({ - storage: { - kind: 'local', - }, - - collections: { - posts: collection({ - label: 'Posts', - slugField: 'title', - path: 'src/content/posts/*', - format: { contentField: 'content' }, - schema: { - title: fields.slug({ name: { label: 'Title' } }), - content: fields.markdoc({ - label: 'Content', - }), - }, - }), - }, -}); -``` - -:::note[¿Ya estás usando colecciones de contenido?] -Si ya estás usando [colecciones de contenido](/es/guides/content-collections/#definiendo-colecciones) en tu proyecto Astro, actualiza el esquema anterior para que coincida exactamente con la(s) colección(es) definida(s) en tu esquema existente. -::: - -Keystatic está ahora configurado para gestionar tu contenido basado en tu esquema. - -## Ejecutar Keystatic localmente - -Para iniciar el panel de control de UI de administrador de Keystatic, inicia el servidor dev de Astro: - - ```bash - npm run dev - ``` - -Visita `http://127.0.0.1:4321/keystatic` en el navegador para ver la UI de administrador de Keystatic corriendo. - -## Crear una nueva entrada - - -1. En el panel de control de administrador de Keystatic, haz clic en la colección "Posts". - -2. Usa el botón para crear una nueva entrada. Agrega el título "Mi primera entrada" y algo de contenido, luego guarda la entrada. - -3. Este post debería ser visible desde tu colección "Posts". Puedes ver y editar tus posts individuales desde esta página del panel de control. - -4. Regresa para ver tus archivos del proyecto Astro. Ahora encontrarás un nuevo archivo `.mdoc` dentro del directorio `src/content/posts` para esta nueva entrada: - - - - src/ - - content/ - - posts/ - - **my-first-post.mdoc** - - -5. Navega a ese archivo en tu editor de código y verifica que puedes ver el contenido Markdown que ingresaste. Por ejemplo: - - ```markdown - --- - title: Mi Primera Entrada - title: Mi primer artículo - --- - - Este es mi primer artículo. ¡Estoy **súper** emocionado! - ``` - - -## Renderizar contenido de Keystatic - -Usa la API de Colecciones de Contenido de Astro para [consultar y mostrar tus posts y colecciones](/es/guides/content-collections/#consultando-colecciones), tal como lo harías en cualquier proyecto de Astro. - -### Mostrar una lista de colecciones - -El siguiente ejemplo muestra una lista de cada título de post, con un enlace a una página de post individual. - -```tsx {4} ---- -import { getCollection } from 'astro:content' - -const posts = await getCollection('posts') ---- - -``` - -### Mostrar una entrada individual - -Para mostrar contenido de una entrada individual, puedes importar y usar el componente `` para [renderizar tu contenido a HTML](/es/guides/content-collections/#renderizando-contenido-a-html): - -```tsx {4-5} ---- -import { getEntry } from 'astro:content' - -const post = await getEntry('posts', 'my-first-post') -const { Content } = await post.render() ---- - -
-

{post.data.title}

- -
- -``` - -Para mayor información sobre consultas, filtrado, visualización de tu contenido de colecciones y más, consulta la documentación completa de [colecciones de contenido](/es/guides/content-collections/). -## Despliegue de Keystatic + Astro - -Para desplegar tu sitio web, visita nuestras [guías de despliegue](/es/guides/deploy/) y sigue las instrucciones para tu proveedor de alojamiento preferido. - -También probablemente querrás [conectar Keystatic a GitHub](https://keystatic.com/docs/connect-to-github) para que puedas gestionar el contenido en la instancia desplegada del proyecto. - -## Recursos oficiales - -- Checa [la guía oficial de Keystatic](https://keystatic.com/docs/installation-astro) -- [La plantilla de inicio de Keystatic](https://github.com/Thinkmill/keystatic/tree/main/templates/astro) diff --git a/src/content/docs/es/guides/cms/keystonejs.mdx b/src/content/docs/es/guides/cms/keystonejs.mdx deleted file mode 100644 index 28d60e8248f41..0000000000000 --- a/src/content/docs/es/guides/cms/keystonejs.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: KeystoneJS y Astro -description: Agrega contenido a tu proyecto Astro utilizando KeystoneJS como un CMS -type: cms -stub: true -service: KeystoneJS -i18nReady: true ---- - -[KeystoneJS](https://keystonejs.com/) es un sistema de gestión de contenido headless de código abierto que te permite describir la estructura de tu esquema. \ No newline at end of file diff --git a/src/content/docs/es/guides/cms/kontent-ai.mdx b/src/content/docs/es/guides/cms/kontent-ai.mdx deleted file mode 100644 index 660530139d4cd..0000000000000 --- a/src/content/docs/es/guides/cms/kontent-ai.mdx +++ /dev/null @@ -1,559 +0,0 @@ ---- -title: Kontent.ai y Astro -description: Agrega contenido a tu proyecto de Astro usando Kontent.ai como CMS -type: cms -service: Kontent.ai -i18nReady: true ---- -import { Steps } from '@astrojs/starlight/components'; -import { FileTree } from '@astrojs/starlight/components'; -import PackageManagerTabs from '~/components/tabs/PackageManagerTabs.astro' - -[Kontent.ai](https://www.kontent.ai/) es un CMS headless que te permite administrar el contenido de una manera estructurada y modular, con el apoyo de capacidades de IA. - -## Integración con Astro - -En esta sección, usarás el [Kit de desarrollo de software (SDK) de Kontent.ai de TypeScript](https://github.com/kontent-ai/delivery-sdk-js) para conectar tu proyecto de Kontent.ai con tu aplicación de Astro. - -### Prerrequisitos - -Para empezar, necesitarás lo siguiente: - -1. **Un proyecto de Kontent.ai** - Si aún no tienes una cuenta de Kontent.ai, [regístrate gratis](https://app.kontent.ai/sign-up) y crea un nuevo proyecto. - -2. **Claves de API de entrega** - Necesitarás el ID de entorno para el contenido publicado y la clave de API de vista previa para obtener borradores (opcional). Ambas claves se encuentran en la pestaña **Environment Settings -> API keys** en Kontent.ai. - -### Configuración de credenciales - -Para agregar tus credenciales de Kontent.ai a Astro, crea un archivo `.env` en la raíz de tu proyecto con las siguientes variables: - -```ini title=".env" -KONTENT_ENVIRONMENT_ID=TU_ID_DE_ENTORNO -KONTENT_PREVIEW_API_KEY=TU_CLAVE_DE_API_DE_VISTA_PREVIA -``` - -Ahora, estas variables de entorno se pueden usar en tu proyecto de Astro. - -Si deseas obtener [IntelliSense de TypeScript para estas variables de entorno](/es/guides/environment-variables/#intellisense-para-typescript), puedes crear un nuevo archivo `env.d.ts` en el directorio `src/` y configurar `ImportMetaEnv` de esta manera: -```ts title="src/env.d.ts" -interface ImportMetaEnv { - readonly KONTENT_ENVIRONMENT_ID: string; - readonly KONTENT_PREVIEW_API_KEY: string; -} -``` - -Tu directorio raíz ahora debería incluir estos nuevos archivos: - - -- src/ - - **env.d.ts** -- **.env** -- astro.config.mjs -- package.json - - - -### Instalación de dependencias - -Para conectar Astro con tu proyecto de Kontent.ai, instala el [Kit de desarrollo de software (SDK) de Kontent.ai de TypeScript](https://github.com/kontent-ai/delivery-sdk-js): - - - - ```shell - npm install @kontent-ai/delivery-sdk - ``` - - - ```shell - pnpm add @kontent-ai/delivery-sdk - ``` - - - ```shell - yarn add @kontent-ai/delivery-sdk - ``` - - - -Después, crea un nuevo archivo llamado `kontent.ts` en el directorio `src/lib/` de tu proyecto de Astro. - -```ts title="src/lib/kontent.ts" -import { createDeliveryClient } from "@kontent-ai/delivery-sdk"; - -export const deliveryClient = createDeliveryClient({ - environmentId: import.meta.env.KONTENT_ENVIRONMENT_ID, - previewApiKey: import.meta.env.KONTENT_PREVIEW_API_KEY, -}); -``` - -:::note -Lee más sobre [cómo obtener variables de entorno en Astro](/es/guides/environment-variables/#obteniendo-variables-de-entorno). -::: - -Esta implementación crea un nuevo objeto `DeliveryClient` usando credenciales del archivo `.env`. - -:::note[Previsualizaciones] -La `previewApiKey` es opcional. Cuando se usa, puedes [configurar cada consulta](https://github.com/kontent-ai/delivery-sdk-js#enable-preview-mode-per-query) al endpoint de la API de entrega para devolver las últimas versiones de los elementos de contenido independientemente de su estado en el flujo de trabajo. De lo contrario, solo se devuelven los elementos publicados. -::: - -Finalmente, el directorio raíz de tu proyecto de Astro ahora debería incluir estos nuevos archivos: - - -- src/ - - lib/ - - **kontent.ts** - - env.d.ts -- .env -- astro.config.mjs -- package.json - - -### Obteniendo datos - -El `DeliveryClient` ahora está disponible para todos los componentes. Para obtener contenido, usa el `DeliveryClient` y el encadenamiento de métodos para definir los elementos deseados. Este ejemplo muestra una búsqueda básica de entradas de blog y renderiza sus títulos en una lista: - -```astro title="src/pages/index.astro" ins={2-7, 16-20} ---- -import { deliveryClient } from "../lib/kontent"; - -const blogPosts = await deliveryClient - .items() - .type("blogPost") - .toPromise() ---- - - - - - Astro - - -
    - {blogPosts.data.items.map(blogPost => ( -
  • {blogPost.elements.title.value}
  • - ))} -
- - -``` - -Puedes encontrar más opciones de consulta en la [documentación de Kontent.ai](https://kontent.ai/learn/develop/hello-world/get-content/javascript). - -## Creando un blog con Astro y Kontent.ai - -Con la configuración anterior, ahora puedes crear un blog que use Kontent.ai como fuente de contenido. - -### Prerrequisitos - -1. **Un proyecto de Kontent.ai** - Para este tutorial, se recomienda usar un proyecto en blanco. Si ya tienes algunos tipos de contenido en tu modelo de contenido, puedes usarlos, pero deberás modificar los fragmentos de código para que coincidan con tu modelo de contenido. - -2. **Un proyecto de Astro configurado para obtener contenido de Kontent.ai** - consulta arriba para obtener más detalles sobre cómo configurar un proyecto de Astro con Kontent.ai - -### Configurando el modelo de contenido - -En Kontent.ai, navega a **Content model** y crea un nuevo tipo de contenido con los siguientes campos y valores: - -* **Name:** Blog Post -* Elements: - * Text field - * **Name:** Title - * **Element Required:** yes - * Rich text field - * **Name:** Teaser - * **Element Required:** yes - * **Allowed in this element:** only check Text - * Rich text field - * **Name:** Content - * **Element Required:** yes - * Date & time field - * **Name:** Date - * URL slug field - * **Name:** URL slug - * **Element Required:** yes - * **Auto-generate from:** select "Title" - -Luego, haz clic en **Save Changes**. - -### Creando contenido - -Ahora, navega a la pestaña **Content & assets** y crea un nuevo elemento de contenido de tipo **Blog Post**. Rellena los campos usando estos valores: - -* **Content item name:** Astro -* **Title:** Astro es increíble -* **Teaser:** Astro es un framework todo en uno para construir sitios web rápidos más rápido. -* **Content:** Puedes usar JavaScript para implementar la funcionalidad del sitio web, pero no es necesario un paquete de cliente. -* **Date & time:** selecciona hoy -* **URL slug:** astro-es-increíble - -Cuando hayas terminado, publica la entrada del blog usando el botón **Publish** en la parte superior. - -*Nota: Siéntete libre de crear tantos posts de blog como quieras antes de pasar al siguiente paso.* - -### Generando el modelo de contenido en TypeScript - -A continuación, generarás tipos de TypeScript a partir de tu modelo de contenido. - -:::note -Este paso es opcional pero proporciona una experiencia de desarrollador mucho mejor y te permite descubrir posibles problemas en tiempo de compilación en lugar de en tiempo de ejecución. -::: - -Primero, instala el [generador de modelos de Kontent.ai JS](https://github.com/kontent-ai/model-generator-js), [ts-node](https://github.com/TypeStrong/ts-node), y [dotenv](https://github.com/motdotla/dotenv): - - - - ```shell - npm install @kontent-ai/model-generator ts-node dotenv - ``` - - - ```shell - pnpm add @kontent-ai/model-generator ts-node dotenv - ``` - - - ```shell - yarn add @kontent-ai/model-generator ts-node dotenv - ``` - - - -Luego, agrega el siguiente script al package.json: - -```json title="package.json" -{ - ... - "scripts": { - ... - "regenerate:models": "ts-node --esm ./generate-models.ts" - }, -} -``` - -Porque los tipos requieren información estructural sobre tu proyecto que no está disponible en la API pública, también debes agregar una clave de API de administración al archivo `.env`. Puedes generar la clave en **Environment settings -> API keys -> Management API**. - - -```ini title=".env" ins={3} -KONTENT_ENVIRONMENT_ID=TU_ID_DE_ENTORNO -KONTENT_PREVIEW_API_KEY=TU_CLAVE_DE_API_DE_VISTA_PREVIA -KONTENT_MANAGEMENT_API_KEY=TU_CLAVE_DE_ADMINISTRACIÓN_DE_API -``` - -Finalmente, agrega el script `generate-models.ts` que configura el generador de modelos para generar los modelos: - -```ts title="generate-models.ts" -import { generateModelsAsync, textHelper } from '@kontent-ai/model-generator' -import { rmSync, mkdirSync } from 'fs' - -import * as dotenv from 'dotenv' -dotenv.config() - -const runAsync = async () => { - rmSync('./src/models', { force: true, recursive: true }) - mkdirSync('./src/models') - - // cambia el directorio de trabajo a models - process.chdir('./src/models') - - await generateModelsAsync({ - sdkType: 'delivery', - apiKey: process.env.KONTENT_MANAGEMENT_API_KEY ?? '', - environmentId: process.env.KONTENT_ENVIRONMENT_ID ?? '', - addTimestamp: false, - isEnterpriseSubscription: false, - }) -} - -// auto invocación de función asíncrona -;(async () => { - await runAsync() -})().catch(err => { - console.error(err) - throw err -}) -``` - -Ahora, ejecútalo: - - - - ```shell - npm run regenerate:models - ``` - - - ```shell - pnpm run regenerate:models - ``` - - - ```shell - yarn run regenerate:models - ``` - - - -### Mostrando una lista de entradas de blog - -Ahora estás listo para obtener contenido. Ve a la página de Astro donde deseas mostrar una lista de todas las entradas de blog, por ejemplo, la página de inicio `index.astro` en `src/pages`. - -Obtén todas las entradas de blog en el frontmatter de la página de Astro: - -```astro title="src/pages/index.astro" ---- -import { deliveryClient } from '../lib/kontent'; -import type { BlogPost } from '../models'; -import { contentTypes } from '../models/project/contentTypes'; - -const blogPosts = await deliveryClient - .items - .type(contentTypes.blog_post.codename) - .toPromise() ---- -``` - -Si omitiste la generación del modelo, también puedes usar un objeto sin tipo y un literal de cadena para definir el tipo: - -```ts -const blogPosts = await deliveryClient - .items() - .type("blogPost") - .toPromise() -``` - -La llamada de recuperación devolverá un objeto `response` que contiene una lista de todas las entradas de blog en `data.items`. En la sección HTML de la página de Astro, puedes usar la función `map()` para enumerar las entradas de blog: - -```astro title="src/pages/index.astro" ins={11-29} ---- -import { deliveryClient } from '../lib/kontent'; -import type { BlogPost } from '../models'; -import { contentTypes } from '../models/project/contentTypes'; - -const blogPosts = await deliveryClient - .items - .type(contentTypes.blogPost.codename) - .toPromise() ---- - - - - - Astro - - -

Artículos de Blog

- - - -``` - -### Generando entradas de blog individuales - -El último paso del tutorial es generar páginas detalladas de entradas de blog. - -#### Generación de sitios estáticos - -En esta sección, usarás el [modo estático (SSG)](/es/guides/routing/#modo-estático-ssg) con Astro. - -Primero, crea un archivo `[slug].astro` en `/src/pages/blog/` que necesita exportar una función `getStaticPaths` que recopila todos los datos del CMS: - -```astro title="src/pages/blog/[slug].astro" ---- -import { deliveryClient } from '../../lib/kontent'; -import type { BlogPost } from '../../models'; -import { contentTypes } from '../../models/project/contentTypes'; - -export async function getStaticPaths() { - const blogPosts = await deliveryClient - .items() - .type(contentTypes.blog_post.codename) - .toPromise() ---- -``` - -Hasta ahora, la función obtiene todas las entradas de blog de Kontent.ai. El fragmento de código es exactamente el mismo que el que usaste en la página de inicio. - -A continuación, la función debe exportar rutas y datos para cada entrada de blog. Nombraste el archivo `[slug].astro`, por lo que el parámetro que representa el slug de URL se llama `slug`: - -```astro title="src/pages/blog/[slug].astro" ins={12-15} ---- -import { deliveryClient } from '../../lib/kontent'; -import type { BlogPost } from '../../models'; -import { contentTypes } from '../../models/project/contentTypes'; - -export async function getStaticPaths() { - const blogPosts = await deliveryClient - .items() - .type(contentTypes.blog_post.codename) - .toPromise() - - return blogPosts.data.items.map(blogPost => ({ - params: { slug: blogPost.elements.url_slug.value }, - props: { blogPost } - })) -} ---- -``` - -La última parte es proporcionar la plantilla HTML y mostrar cada entrada de blog: - -```astro title="src/pages/blog/[slug].astro" ins={18-33} ---- -import { deliveryClient } from '../../lib/kontent'; -import type { BlogPost } from '../../models'; -import { contentTypes } from '../../models/project/contentTypes'; - -export async function getStaticPaths() { - const blogPosts = await deliveryClient - .items() - .type(contentTypes.blog_post.codename) - .toPromise() - - return blogPosts.data.items.map(blogPost => ({ - params: { slug: blogPost.elements.url_slug.value }, - props: { blogPost } - })) -} - -const blogPost: BlogPost = Astro.props.blogPost ---- - - - - - {blogPost.elements.title.value} - - -
-

{blogPost.elements.title.value}

- - - - - -``` - -Navega a tu vista previa de Astro (http://localhost:4321/blog/astro-is-amazing/ de forma predeterminada) para ver la entrada de blog renderizada. - -#### Renderizado del lado del servidor - -Si has optado por el modo SSR, usarás rutas dinámicas para obtener los datos de la página de Kontent.ai. - -Crea un nuevo archivo `[slug].astro` en `/src/pages/blog/` y agrega el siguiente código. La recuperación de datos es muy similar a los casos de uso anteriores, pero agrega un `equalsFilter` que nos permite encontrar la entrada de blog correcta en función de la URL utilizada: - -```astro title="src/pages/blog/[slug].astro" ---- -import { deliveryClient } from '../../lib/kontent'; -import type { BlogPost } from '../../models'; -import { contentTypes } from '../../models/project/contentTypes'; - -const { slug } = Astro.params -let blogPost: BlogPost; -try { - const data = await deliveryClient - .items() - .equalsFilter(contentTypes.blog_post.elements.url_slug.codename, slug ?? '') - .type(contentTypes.blog_post.codename) - .limitParameter(1) - .toPromise() - blogPost = data.data.items[0] -} catch (error) { - return Astro.redirect('/404') -} ---- -``` - -Si no estás usando tipos generados, puedes usar literales de string para definir el tipo de elemento de contenido y el codename del elemento filtrado: - -```ts -const data = await deliveryClient - .items() - .equalsFilter("url_slug", slug ?? '') - .type("blog_post") - .limitParameter(1) - .toPromise() -``` - -Por último, agrega el código HTML para renderizar la entrada de blog. Esta parte es la misma que con la generación estática: - -```astro title="src/pages/blog/[slug].astro" ins={20-33} ---- -import { deliveryClient } from '../../lib/kontent'; -import type { BlogPost } from '../../models'; -import { contentTypes } from '../../models/project/contentTypes'; - -const { slug } = Astro.params -let blogPost: BlogPost; -try { - const data = await deliveryClient - .items() - .equalsFilter(contentTypes.blog_post.elements.url_slug.codename, slug ?? '') - .type(contentTypes.blog_post.codename) - .limitParameter(1) - .toPromise() - blogPost = data.data.items[0] -} catch (error) { - return Astro.redirect('/404') -} ---- - - - - - {blogPost.elements.title.value} - - -
-

{blogPost.elements.title.value}

- - - - - -``` - -### Publicando tu sitio - -Para desplegar tu sitio web, visita las [guías de despliegue](/es/guides/deploy/) y sigue las instrucciones para tu proveedor de alojamiento preferido. - -#### Recompila cuando cambie Kontent.ai - -Si tu proyecto está usando el modo estático predeterminado de Astro, deberás configurar un webhook para iniciar una nueva compilación cuando cambie tu contenido. Si estás usando Netlify o Vercel como proveedor de alojamiento, puedes usar su función de webhook para iniciar una nueva compilación a partir de eventos de Kontent.ai. - -##### Netlify - -Para configurar un webhook en Netlify: - - -1. Ve al panel de control de tu sitio y haz clic en **Build & deploy**. - -2. En la pestaña **Continuous Deployment**, encuentra la sección **Build hooks** y haz clic en **Add build hook**. - -3. Proporciona un nombre para tu webhook y selecciona la rama en la que deseas iniciar la compilación. Haz clic en **Save** y copia la URL generada. - - -##### Vercel - -Para configurar un webhook en Vercel: - - -1. Ve al panel de control de tu proyecto y haz clic en **Settings**. - -2. En la pestaña **Git**, encuentra la sección **Deploy Hooks**. - -3. Proporciona un nombre para tu webhook y la rama en la que deseas iniciar la compilación. Haz clic en **Add** y copia la URL generada. - - -#### Agregando un webhook a Kontent.ai - -En la aplicación [Kontent.ai](https://kontent.ai/learn/docs/webhooks/javascript), ve a **Environment settings -> Webhooks**. Haz clic en **Create new webhook** y proporciona un nombre para tu nuevo webhook. Pega la URL que copiaste de Netlify o Vercel y selecciona qué eventos deben activar el webhook. De forma predeterminada, para reconstruir tu sitio cuando cambie el contenido publicado, solo necesitas los eventos **Publish** y **Unpublish** en **Delivery API triggers**. Cuando hayas terminado, haz clic en Save. - -Ahora, cada vez que publiques una nueva entrada de blog en Kontent.ai, se iniciará una nueva compilación y se actualizará tu blog. - diff --git a/src/content/docs/es/guides/cms/microcms.mdx b/src/content/docs/es/guides/cms/microcms.mdx deleted file mode 100644 index a39c842f02947..0000000000000 --- a/src/content/docs/es/guides/cms/microcms.mdx +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: microCMS y Astro -description: Añade contenido a tu proyecto Astro usando microCMS -type: cms -stub: true -service: microCMS -i18nReady: true ---- - -[microCMS](https://microcms.io/) es un headless CMS basado en API que te permite definir contenido usando esquemas, y manejarlo usando el dashboard. - -## Recursos Oficiales - -- Echa un vistazo al [documento oficial de microCMS](https://document.microcms.io/tutorial/astro/astro-top) -- Blog: [Construye un blog con microCMS](https://blog.microcms.io/astro-microcms-introduction/) diff --git a/src/content/docs/es/guides/cms/payload.mdx b/src/content/docs/es/guides/cms/payload.mdx deleted file mode 100644 index 583724d4de658..0000000000000 --- a/src/content/docs/es/guides/cms/payload.mdx +++ /dev/null @@ -1,222 +0,0 @@ ---- -title: Payload CMS y Astro -description: Agrega contenido a tu proyecto de Astro utilizando Payload como CMS -type: cms -stub: true -service: Payload CMS -i18nReady: true ---- -import { Steps } from '@astrojs/starlight/components'; - -[PayloadCMS](https://payloadcms.com/) es un sistema de gestión de contenido headless de código abierto que se puede utilizar para proporcionar contenido para tu proyecto Astro. - -## Integración con Astro - -### Prerequisitos - -1. **Un proyecto de Astro** - Si aún no tienes un proyecto de Astro, nuestra [guía de instalación](/es/install-and-setup/) te pondrá en marcha en poco tiempo. -2. **Una base de datos de MongoDB** - PayloadCMS te pedirá una cadena de conexión de MongoDB al crear un nuevo proyecto. Puede configurar uno localmente o usar [MongoDBAtlas](https://www.mongodb.com/) para alojar una base de datos en la web de forma gratuita. -3. **Una API REST de PayloadCMS** - Crea un proyecto de [PayloadCMS](https://payloadcms.com/docs/getting-started/installation) y conéctalo a tu base de datos MongoDB durante la configuración. - -:::note[Escogiendo una plantilla] -Durante la instalación de PayloadCMS, se te preguntará si deseas utilizar una plantilla. - -Escoger cualquiera de las plantillas disponibles en este paso (como 'blog') genera automáticamente colecciones adicionales para que las utilices. De lo contrario, deberás crear manualmente tus colecciones de PayloadCMS. -::: - -### Configurando Astro para tu colección de PayloadCMS - -Tu proyecto de plantilla Payload contendrá un archivo llamado Posts.ts en `src/collections/`. Si no escogiste una plantilla durante la instalación que creara una colección de contenido para ti, puedes crear una nueva colección de PayloadCMS agregando este archivo de configuración manualmente. El siguiente ejemplo muestra este archivo para una colección llamada `posts` que requiere los campos `title`, `content` y `slug`: - - -```ts title="src/collections/Posts.ts" -import { CollectionConfig } from "payload/types"; - -const Posts: CollectionConfig = { - slug: "posts", - admin: { - useAsTitle: "title", - }, - access: { - read: () => true, - }, - - fields: [ - { - name: "title", - type: "text", - required: true, - }, - { - name: "content", - type: "text", - required: true, - }, - { - name: "slug", - type: "text", - required: true, - }, - ], -}; - -export default Posts; -``` - - -1. Importa y agrega tanto `Users` (disponible en todos los proyectos de PayloadCMS) como cualquier otra colección (por ejemplo, `Posts`) a las colecciones disponibles en el archivo `payload.config.ts`. - - ```astro title="src/payload.config.ts" ins={4, 5, 12} - import { buildConfig } from "payload/config"; - import path from "path"; - import Users from "./collections/Users"; - import Posts from "./collections/Posts"; - export default buildConfig({ - serverURL: "http://localhost:4321", - admin: { - user: Users.slug, - }, - collections: [Users, Posts], - typescript: { - outputFile: path.resolve(__dirname, "payload-types.ts"), - }, - graphQL: { - schemaOutputFile: path.resolve(__dirname, "generated-schema.graphql"), - }, - }); - ``` - - Esto hará que aparezca una nueva colección llamada "Posts" en tu panel de control de PayloadCMS junto a la colección "Users". - -2. Ingresa a la colección "Posts" y crea una nueva publicación. Después de guardarla, notarás que la URL de la API aparece en la esquina inferior derecha. - -3. Con el servidor de desarrollo en ejecución, abre `http://localhost:4321/api/posts` en tu navegador. Deberías ver un archivo JSON que contiene la publicación que has creado como un objeto. - - ```json - { - "docs":[ - { - "id":"64098b16483b0f06a7e20ed4", - "title":"Astro & PayloadCMS Title 🚀", - "content":"Astro & PayloadCMS Content", - "slug":"astro-payloadcms-slug", - "createdAt":"2023-03-09T07:30:30.837Z", - "updatedAt":"2023-03-09T07:30:30.837Z" - } - ], - "totalDocs":1, - "limit":10, - "totalPages":1, - "page":1, - "pagingCounter":1, - "hasPrevPage":false, - "hasNextPage":false, - "prevPage":null, - "nextPage":null - } - ``` - - -:::tip -Por defecto, tanto Astro como PayloadCMS utilizarán el puerto 4321. Es posible que desees cambiar el puerto de PayloadCMS en el archivo `src/server.ts`. No olvides actualizar el `serverURL` en `src/payload.config.ts` también. -::: - -### Obteniendo los datos - -Obtén los datos de PayloadCMS a través de la URL única de la API REST de tu sitio y la ruta de tu contenido. (Por defecto, PayloadCMS montará todas las rutas a través de `/api`.) Luego, puedes renderizar las propiedades de tus datos utilizando la directiva `set:html=""` de Astro. - -Juntos con tu publicación, PayloadCMS devolverá algunos metadatos de nivel superior. Los documentos reales están anidados dentro del arreglo `docs`. - -Por ejemplo, para mostrar una lista de títulos de publicaciones y su contenido: - -```astro title="src/pages/index.astro" ---- -import HomeLayout from "../layouts/HomeLayout.astro"; - -const res = await fetch("http://localhost:5000/api/posts") // http://localhost:4321/api/posts by default -const posts = await res.json() ---- - - - { - posts.docs.map((post) => ( -

-

- )) - } - -``` - -## Construyendo un blog con PayloadCMS y Astro - -Crea una página índice de blog `src/pages/index.astro` para listar cada una de tus publicaciones con un enlace a su propia página. - -La búsqueda a través de la API devuelve un arreglo de objetos (publicaciones) que incluyen, entre otros, las siguientes propiedades: - -- `title` -- `content` -- `slug` - -```astro title="src/pages/index.astro" ---- -import HomeLayout from "../layouts/HomeLayout.astro"; - -const res = await fetch("http://localhost:5000/api/posts") // http://localhost:4321/api/posts by default -const posts = await res.json() ---- - - -

Astro + PayloadCMS 🚀

-

Blog posts list:

- -
-``` - -### Usando la API de PayloadCMS para generar páginas - -Crea una página `src/pages/posts/[slug].astro` para [generar dinámicamente una página](/es/guides/routing/#rutas-dinámicas) para cada publicación. - -```astro title="src/pages/posts/[slug].astro" ---- -import PostLayout from "../../layouts/PostLayout.astro" - -const {title, content} = Astro.props - -// La función getStaticPaths() es necesaria para sitios estáticos de Astro. -// Si estás usando SSR, no necesitarás esta función. -export async function getStaticPaths() { - let data = await fetch("http://localhost:5000/api/posts") - let posts = await data.json() - - return posts.docs.map((post) => { - return { - params: {slug: post.slug}, - props: {title: post.title, content: post.content}, - }; - }); -} ---- - -
-

-

-

-
-``` - -### Publicando tu sitio - -Para desplegar tu sitio visita nuestra [guía de despliegue](/es/guides/deploy/) y sigue las instrucciones para tu proveedor de alojamiento preferido. - -## Recursos de la comunidad - -- Prueba esta [Plantilla de Payload CMS y Astro](https://github.com/Lambdo-Labs/payloadcms-astro-template). -- Echa un vistazo a [Astroad](https://github.com/mooxl/astroad) para un fácil desarrollo y despliegue en VPS con Docker. diff --git a/src/content/docs/es/guides/cms/preprcms.mdx b/src/content/docs/es/guides/cms/preprcms.mdx deleted file mode 100644 index f686d56e06a58..0000000000000 --- a/src/content/docs/es/guides/cms/preprcms.mdx +++ /dev/null @@ -1,240 +0,0 @@ ---- -title: Prepr CMS y Astro -description: Añade contenido a tu proyecto de Astro utilizando Prepr como CMS -type: cms -service: Prepr CMS -stub: true -i18nReady: true ---- -import { Steps } from '@astrojs/starlight/components'; -import { FileTree } from '@astrojs/starlight/components'; -import PackageManagerTabs from '~/components/tabs/PackageManagerTabs.astro' - -[Prepr CMD](https://www.prepr.io/) es un CMS headless con personalización integrada. - -## Integración con Astro - -Prepr CMS proporciona una [API GraphQL](https://docs.prepr.io/reference/graphql/v1/overview) para conectar tus datos a Astro. - -### Prerrequisitos - -Para empezar, necesitarás lo siguiente: - -- Un proyecto de Astro nuevo o existente configurado para [renderizado bajo demanda](/es/guides/on-demand-rendering/). -- [Una cuenta Prepr gratis](https://signup.prepr.io/) -- [Un entorno Prepr con publicaciones de blog existentes](https://docs.prepr.io/account/set-up-environments#create-an-envirntonment). Estas publicaciones deben incluir un `title` y `content`. Los otros campos son opcionales. - -### Configuración de credenciales - -Para agregar el endpoint de Prepr a tu proyecto de Astro, crea un archivo `.env` en la raíz de tu proyecto si no existe y agrega la siguiente variable: - -```ini title=".env" -PREPR_ENDPOINT=YOUR_PREPR_API_URL -``` - -Encontrarás tu valor `YOUR_PREPR_API_URL` en la configuración de tu cuenta Prepr: - - -1. Ve a **Settings > Access tokens** para ver tus tokens de acceso de vista previa y producción. - -2. Usa el valor **API URL** del token de acceso **GraphQL Production** para solo recuperar elementos de contenido publicados para tu sitio de Astro. - - -### Configuración del endpoint de Prepr - -Crea una nueva carpeta `src/lib/` y agrega un nuevo archivo llamado `prepr.js`. Aquí es donde configurarás el endpoint de Prepr. Agrega el siguiente código para obtener tus datos de Prepr CMS: - -```js title="src/lib/prepr.js" - -export async function Prepr(query, variables) { - const response = await fetch(import.meta.env.PREPR_ENDPOINT, { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify({ query, variables }), - }) - return response -} -``` - -Tu directorio raíz ahora debería incluir estos archivos: - - -- lib/ - - **prepr.js** -- src/ -- **.env** -- astro.config.mjs -- package.json - - - -### Obtención de datos - -Obtendrás tus datos de Prepr escribiendo consultas para interactuar con su API GraphQL. - -#### Crea una consulta GraphQL para recuperar tus artículos de blog: - - -1. Crea una nueva carpeta `src/queries/` y agrega un archivo llamado `get-articles.js`. - -2. Agrega la siguiente consulta a este archivo para recuperar todos los artículos: - - ```js title="src/queries/get-articles.js" - - const GetArticles = ` - query { - Articles { - items { - _id - _slug - title - } - } - } - ` - export default GetArticles - ``` - -3. Para mostrar una lista enlazada de tus publicaciones de blog en una página, importa y ejecuta tu consulta, incluyendo el endpoint de Prepr. Luego tendrás acceso a todos los títulos de tus publicaciones y sus slugs para renderizar en la página. (En el siguiente paso, [crearás páginas individuales para tus publicaciones de blog](#creación-de-páginas-individuales-para-publicaciones-de-blog).) - - ```astro title="src/pages/index.astro" ins={3-4, 6-8, 15-23} - --- - import Layout from '../layouts/Layout.astro'; - import { Prepr } from '../lib/prepr.js'; - import GetArticles from '../queries/get-articles.js'; - - const response = await Prepr(GetArticles) - const { data } = await response.json() - const articles = data.Articles - --- - - -

- Mi sitio blog -

-
- - ``` - - -Tu directorio raíz ahora debería incluir estos archivos: - - -- lib/ - - prepr.js - - **queries**/ - - **get-articles.js** -- src/ -- .env -- astro.config.mjs -- package.json - - -#### Creación de páginas individuales para publicaciones de blog - -Para crear una página por cada publicación de blog, ejecutarás una nueva consulta GraphQL en una página `.astro` de [enrutamiento dinámico](/es/guides/routing/#modo-servidor-ssr). Esta consulta obtendrá un artículo específico por su slug y se creará una nueva página para cada publicación de blog individual. - - -1. Crea un archivo llamado `get-article-by-slug.js` en la carpeta `queries` y agrega lo siguiente para consultar un artículo específico por su slug y devolver datos como el `title` y `content` del artículo: - - ```js title="src/lib/queries/get-article-by-slug.js" - - const GetArticleBySlug = ` - query ($slug: String) { - Article (slug: $slug) { - _id - title - content { - __typename - ... on Text { - body - text - } - ... on Assets { - items { - url - } - } - } - } - }` - - export default GetArticleBySlug - ``` - - :::tip - Puedes crear y [probar consultas GraphQL](https://docs.prepr.io/reference/graphql/v1/test-queries) utilizando el [Apollo explorer](https://studio.apollographql.com/sandbox/explorer) en Prepr. Abre el API Explorer desde la página de elementos de contenido *Article* en Prepr. - El contenido del artículo se almacena en un *campo de contenido dinámico*. Consulta la documentación de GraphQL para obtener más detalles sobre [cómo obtener los datos dentro de este campo](https://docs.prepr.io/reference/graphql/v1/schema-field-types-dynamic-content-field). - ::: - -2. Dentro de la carpeta `src/pages`, crea un archivo llamado `[…slug].astro`. Agrega el siguiente código para importar y ejecutar la consulta del paso anterior y mostrar el artículo recuperado: - - ```astro title="src/pages/[...slug].astro" - --- - import Layout from '../layouts/Layout.astro'; - import {Prepr} from '../lib/prepr.js'; - import GetArticleBySlug from '../queries/get-article-by-slug.js'; - const { slug } = Astro.params; - const response = await Prepr(GetArticleBySlug, {slug}) - const { data } = await response.json() - const article = data.Article - --- - -
-

{article.title}

- { - article.content.map((content) => ( -
- { - content.__typename === "Assets" && - - } - { - content.__typename === 'Text' && -
- } -
- )) - } -
-
- ``` -
- -La carpeta raíz de tu proyecto ahora debería incluir estos archivos: - - -- lib/ - - prepr.js - - queries/ - - get-articles.js - - **get-article-by-slug.js** -- src/ - - pages/ - - index.astro - - **[…slug].astro** -- .env -- astro.config.mjs -- package.json - - -Ahora, cuando hagas clic en un enlace de artículo desde la lista principal de publicaciones de blog, se te llevará a una página con su contenido individual. - -### Publicar tu sitio - -Para desplegar tu blog de Prepr, visita nuestras [guías de despliegue](/es/guides/deploy/) y sigue las instrucciones para tu proveedor de alojamiento preferido. - -## Recursos oficiales - -- Sigue la [guía de inicio rápido de Prepr CMS Astro](https://github.com/preprio/astro-quick-start) para hacer un blog simple con Astro y Prepr CMS. -- Consulta la guía [Conectar Prepr CMS a Astro](https://docs.prepr.io/connecting-front-end-apps/astro) para obtener una descripción general de los recursos de Astro y Prepr CMS. diff --git a/src/content/docs/es/guides/cms/prismic.mdx b/src/content/docs/es/guides/cms/prismic.mdx deleted file mode 100644 index 1c8e71232a77f..0000000000000 --- a/src/content/docs/es/guides/cms/prismic.mdx +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Prismic y Astro -description: Agrega contenido a tu proyecto de Astro utilizando Prismic como CMS -type: cms -stub: true -service: Prismic -i18nReady: true ---- - -[Prismic](https://prismic.io/) es un sistema de gestión de contenido headless. - -## Recursos de la comunidad - -- [Construyendo con Astro y Prismic - con Nate Moore](https://www.youtube.com/watch?v=qFUfuDSLdxM) (transmisión en vivo) y el [repositorio del programa](https://github.com/natemoo-re/miles-of-code). \ No newline at end of file diff --git a/src/content/docs/es/guides/cms/sanity.mdx b/src/content/docs/es/guides/cms/sanity.mdx deleted file mode 100644 index 7b8894796856f..0000000000000 --- a/src/content/docs/es/guides/cms/sanity.mdx +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: Sanity y Astro -description: Agrega contenido a tu proyecto de Astro utilizando Sanity como CMS -type: cms -stub: true -service: Sanity -i18nReady: true ---- - -import Grid from '~/components/FluidGrid.astro' -import Card from '~/components/ShowcaseCard.astro' - -[Sanity](http://sanity.io) es un sistema de gestión de contenido headless que se centra en el [contenido estructurado](https://www.sanity.io/structured-content-platform). - -## Recursos oficiales - -- [Integración oficial de Sanity para Astro](https://www.sanity.io/plugins/sanity-astro) - -- [Crea tu blog con Astro y Sanity](https://www.sanity.io/guides/sanity-astro-blog) - -- [Una página minimalista con Astro y Sanity Studio](https://www.sanity.io/templates/astro-sanity-clean) - -## Temas - - - - diff --git a/src/content/docs/es/guides/cms/sitecore.mdx b/src/content/docs/es/guides/cms/sitecore.mdx deleted file mode 100644 index 9c0dd9c98ee03..0000000000000 --- a/src/content/docs/es/guides/cms/sitecore.mdx +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: Sitecore Experience Manager y Astro -description: Agrega contenido a tu proyecto utilizando Sitecore como tu CMS. -type: cms -stub: true -service: Sitecore XM -i18nReady: true ---- -import { Steps } from '@astrojs/starlight/components'; - -[Sitecore Experience Manager (XM)](https://www.sitecore.com/products/experience-manager) es un sistema de gestión de contenidos de nivel empresarial construido sobre ASP.NET. - -## Cómo empezar - - -1. [Crea un sitio web Sitecore Headless](https://doc.sitecore.com/xp/en/developers/sxa/103/sitecore-experience-accelerator/create-a-headless-tenant-and-site.html) siguiendo la documentación oficial de Sitcore. - -2. Ejecuta el siguiente comando de inicialización del proyecto en tu terminal: - - ```shell - npx @astro-sitecore-jss/create-astro-sitecore-jss@latest - ``` - -3. Sigue las instrucciones en la terminal para crear tu proyecto. - - -## Recursos de la comunidad - -- [Kit de desarrollo de software JavaScript de Sitecore para Astro](https://github.com/exdst/jss-astro-public) en GitHub -- [Introducción a Sitecore con Astro](https://exdst.com/posts/20231002-sitecore-astro) -- [Comenzando tu primer proyecto de Astro con Sitecore](https://exdst.com/posts/20240103-first-sitecore-astro-project) diff --git a/src/content/docs/es/guides/cms/spinal.mdx b/src/content/docs/es/guides/cms/spinal.mdx deleted file mode 100644 index 2c28d70769531..0000000000000 --- a/src/content/docs/es/guides/cms/spinal.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: Spinal y Astro -description: Agrega contenido a tu proyecto utilizando Spinal como tu CMS. -type: cms -stub: true -service: Spinal -i18nReady: true ---- -import { Steps } from '@astrojs/starlight/components'; - -[Spinal](https://spinalcms.com/cms-for-astro/) es un CMS comercial basado en Git, enfocado en SaaS. - -## Comenzando - - -1. [Crea una cuenta en Spinal](https://spinalcms.com/signup/). -2. Conecta tu cuenta de GitHub a Spinal. -3. Selecciona tu repositorio de Astro cuando se te solicite. - - -Todo el contenido de Markdown de la carpeta seleccionada será importado a tu cuenta de Spinal y estará listo para ser editado. - -## Recursos oficiales -- [Tema de documentación construido para Astro con Tailwind CSS](https://spinalcms.com/resources/astro-documentation-theme-with-tailwind-css/) -## Sitios de producción - -Los siguientes sitios utilizan Astro + Spinal en producción: - -- [spinalcms.com](https://spinalcms.com/) (todos los artículos del blog, documentación, registro de cambios, páginas de características, etc.) \ No newline at end of file diff --git a/src/content/docs/es/guides/cms/statamic.mdx b/src/content/docs/es/guides/cms/statamic.mdx deleted file mode 100644 index f5dd87ae8a1bc..0000000000000 --- a/src/content/docs/es/guides/cms/statamic.mdx +++ /dev/null @@ -1,123 +0,0 @@ ---- -title: Headless Statamic y Astro -description: Agrega contenido a tu proyecto de Astro usando Statamic como CMS -type: cms -stub: false -service: Statamic -i18nReady: true ---- -import Grid from '~/components/FluidGrid.astro' -import Card from '~/components/ShowcaseCard.astro' - -[Statamic](https://statamic.com/) es un CMS moderno que utiliza archivos planos. Permite a los desarrolladores crear fácilmente sitios web y aplicaciones dinámicas, mientras que ofrece a los editores de contenido una interfaz intuitiva y fácil de usar para administrar el contenido. - -## Integración con Astro - -Statamic viene con una [API REST](https://statamic.dev/rest-api) y una [API GraphQL](https://statamic.dev/graphql) integradas para conectar tus datos a Astro. - -### Prerrequisitos - -Para empezar, necesitarás lo siguiente: - -1. Solo están disponibles las API REST y GraphQL API en la versión pro de Statamic. Puedes probar la versión Pro gratis en tu [máquina local](https://statamic.dev/tips/how-to-enable-statamic-pro#trial-mode). -2. **Un proyecto Astro** - Si todavía necesitas un proyecto Astro, nuestra [guía de instalación](/es/install-and-setup/) te pondrá en marcha rápidamente. -3. **Un sitio Statamic** - Si necesitas un sitio Statamic, [la guía de instalación de Statamic](https://statamic.dev/quick-start-guide) te ayudará a empezar. -Recuerda [habilitar la API REST](https://statamic.dev/rest-api#enable-the-api) o la [API GraphQL](https://statamic.dev/graphql#enable-graphql) añadiendo `STATAMIC_API_ENABLED=true` o `STATAMIC_GRAPHQL_ENABLED=true` en el archivo `.env` y habilitando los recursos necesarios en el archivo de configuración de la API. - -:::caution -Todos los ejemplos asumen que tu sitio web tiene una colección llamada `posts`, que tiene un blueprint llamado `post`, y este blueprint tiene un campo de título (tipo de campo texto) y contenido (tipo de campo markdown). -::: - -### Obteniendo Datos -:::caution -Si estás usando Statamic y Astro en tu máquina local, recuerda usar `127.0.0.1` en lugar de `localhost` al solicitar los datos a la API. - -Cuando se solicita los datos desde el frontmatter de Astro, `localhost` no se resuelve correctamente como lo hace en el navegador y cualquier solicitud a cualquiera de las API fallará. -::: - -#### REST API - -Obtén los datos de Statamic de la URL de la API REST de tu sitio. Por defecto, es `https://[YOUR-SITE]/api/`. A continuación, puedes renderizar las propiedades de tus datos utilizando la directiva `set:html={}` de Astro. - -Por ejemplo, para mostrar una lista de títulos y su contenido de una [colección](https://statamic.dev/collections) seleccionada: - -```astro title="src/pages/index.astro ---- -const res = await fetch("https://[YOUR-SITE]/api/collections/posts/entries?sort=-date") -const posts = await res.json() ---- -

Astro + Statamic 🚀

-{ - posts.map((post) => ( -

-

- )) -} -``` - -#### GraphQL - -Obtén los datos de Statamic de la URL de la API GraphQL de tu sitio. Por defecto, es `https://[YOUR-SITE]/graphql/`. A continuación, puedes renderizar las propiedades de tus datos utilizando la directiva `set:html={}` de Astro. - -Por ejemlo, para mostrar una lista de títulos y su contenido de una [colección](https://statamic.dev/collections) seleccionada: - -```astro title="src/pages/index.astro ---- -const graphqlQuery = { - query: ` - query Entries($page: Int, $locale: String) { - entries( - collection: "posts" - sort: "date asc" - limit: 20 - page: $page - filter: { locale: $locale } - ) { - current_page - has_more_pages - data { - title - ... on Entry_Posts_Post { - content - } - } - } - `, - variables: { - page: page, - locale: locale, - }, -}; - -const res = await fetch("https://[YOUR-SITE]/graphql", { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify(graphqlQuery), -}) - -const { data } = await res.json(); -const entries = data?.entries; ---- -

Astro + Statamic 🚀

-{ - entires.data.map((post) => ( -

-

- )) -} -``` - -### Publicando tu sitio - -Para desplegar tu sitio Astro, visita nuestras [guías de despliegue](/es/guides/deploy/) y sigue las instrucciones para tu proveedor de alojamiento preferido. - -## Recursos de la comunidad - -- [Como construir un sitio estático usando Statamic como CMS headless](https://buddy.works/guides/statamic-rest-api) -- [Implementando previsualizaciones en vivo en Statamic headless usando Astro](https://maciekpalmowski.dev/implementing-live-previews-in-headless-statamic-when-using-astro/) - -## Temas - - - - diff --git a/src/content/docs/es/guides/cms/storyblok.mdx b/src/content/docs/es/guides/cms/storyblok.mdx deleted file mode 100644 index 60919da291da1..0000000000000 --- a/src/content/docs/es/guides/cms/storyblok.mdx +++ /dev/null @@ -1,549 +0,0 @@ ---- -title: Storyblok y Astro -description: Agrega contenido a tu proyecto de Astro usando Storyblok como CMS -type: cms -service: Storyblok -stub: false -i18nReady: true ---- -import { FileTree } from '@astrojs/starlight/components'; -import PackageManagerTabs from '~/components/tabs/PackageManagerTabs.astro' -import { Steps } from '@astrojs/starlight/components'; - - -[Storyblok](https://www.storyblok.com/) es un headless CMS basado en componentes que te permite gestionar tu contenido utilizando componentes reutilizables llamados Bloks. - -## Integración con Astro - -En esta sección, utilizarás la [integración de Storyblok](https://github.com/storyblok/storyblok-astro) para conectar Storyblok con Astro. - -### Prerrequisitos - -Para comenzar, necesitarás lo siguiente: - -1. **Un proyecto de Astro** - Si aún no tienes un proyecto de Astro, nuestra [guía de instalación](/es/install-and-setup/) te ayudará a poner en marcha en poco tiempo. - -2. **Una cuenta y espacio de Storyblok** - Si aún no tienes una cuenta, [regístrate gratis](https://app.storyblok.com/#/signup) y crea un nuevo espacio. - -3. **Token de vista previa de Storyblok** - Este token se utilizará para obtener borradores y versiones publicadas de tu contenido. Puedes encontrar y generar tu token de API en la pestaña "Access Tokens" de la configuración de tu espacio de Storyblok. - -### Configuración de credenciales - -Para agregar las credenciales de tu sitio a Astro, crea un archivo `.env` en la raíz de tu proyecto con la siguiente variable: - -```ini title=".env" -STORYBLOK_TOKEN=TU_PREVIEW_TOKEN -``` - -Ahora, deberías poder usar esta variable de entorno en tu proyecto. - -Tu directorio raíz debería incluir este nuevo archivo ahora: - - -- src/ -- **.env** -- astro.config.mjs -- package.json - - -### Instalación de dependencias - - - -Para conectar Astro con tu espacio de Storyblok, instala la [integración oficial de Storyblok](https://github.com/storyblok/storyblok-astro) utilizando el siguiente comando según tu gestor de paquetes preferido: - - - - ```shell - npm install @storyblok/astro vite - ``` - - - ```shell - pnpm add @storyblok/astro vite - ``` - - - ```shell - yarn add @storyblok/astro vite - ``` - - - -### Configurando Storyblok - -Modifica tu archivo de configuración de Astro para incluir la integración de Storyblok de la siguiente manera: - -```js title="astro.config.mjs" -import { defineConfig } from 'astro/config'; -import storyblok from '@storyblok/astro'; -import { loadEnv } from 'vite'; - -const env = loadEnv("", process.cwd(), 'STORYBLOK'); - -export default defineConfig({ - integrations: [ - storyblok({ - accessToken: env.STORYBLOK_TOKEN, - components: { - // Añade tus componentes aquí - }, - apiOptions: { - // Elige la región de tu espacio de Storyblok. - region: 'us', // opcional, o 'eu' (por defecto) - }, - }) - ], -}); -``` - -La integración de Storyblok requiere un objeto con las siguientes propiedades: - -1. `accessToken` - Esto hace referencia al token de la API de Storyblok que agregaste en el paso anterior. - - :::tip - Dado que el archivo de configuración de Astro normalmente no admite variables de entorno, utiliza la función `loadEnv` de Vite para cargarlas. - ::: - -2. `components` - Un objeto que mapea los nombres de los componentes de Storyblok a las rutas de tus componentes locales. Esto es necesario para renderizar tus Bloks de Storyblok en Astro. - - :::note - Las rutas de los componentes son relativas al directorio `src`. Por ejemplo, si tu componente se encuentra en `src/storyblok/MyComponent.astro`,la ruta sería `storyblok/MyComponent` (sin la extensión `.astro`). - ::: - -3. `apiOptions` - Un objeto conteniendo las [opciones de la API de Storyblok](https://github.com/storyblok/storyblok-astro#options). - - :::caution - Por defecto, la región es `eu`. Si tu espacio de Storyblok fue creado en la región de US, necesitarás establecer la región como `us`. - ::: - -### Conectando Bloks a los componentes de Astro - -Para conectar tus Bloks a Astro, crea una nueva carpeta llamada `storyblok` dentro del directorio `src`. Esta carpeta contendrá todos los componentes de Astro que coincidirán con tus Bloks en tu biblioteca de Bloks de Storyblok. - -En este ejemplo, tienes un tipo de contenido de Blok llamado `blogPost` en tu biblioteca de Storyblok con los siguientes campos: - -- `title` - Un campo de texto -- `description` - Un campo de texto -- `content` - Un campo de texto enriquecido - -Nuestro objetivo es crear el equivalente del componente de Astro que utilizará estos campos para renderizar su contenido. Para hacer esto, crea un nuevo archivo llamado `BlogPost.astro` dentro de `src/storyblok` con el siguiente contenido: - -```astro title="src/storyblok/BlogPost.astro" ---- -import { storyblokEditable, renderRichText } from '@storyblok/astro' - -const { blok } = Astro.props -const content = renderRichText(blok.content) ---- - -

-

{blok.title}

-

{blok.description}

- -
-``` - -La propiedad `blok` contiene los datos que recibirás de Storyblok. También contiene los campos que se definieron en el Blok de tipo de contenido `blogPost` en Storyblok. - -Para renderizar nuestro contenido, la integración proporciona funciones de utilidad como: - -- `storyblokEditable` - Agrega los atributos necesarios a los elementos para que puedas editarlos en Storyblok. -- `renderRichText` - transforma el campo de texto enriquecido en HTML. - -Tu directorio raíz debería incluir este nuevo archivo: - - -- src/ - - storyblok/ - - **BlogPost.astro** -- .env -- astro.config.mjs -- package.json - - -Finalmente, para conectar el Blok `blogPost` al componente `BlogPost`, agrega una nueva propiedad a tu objeto `components` en el archivo de configuración de Astro. - -- La clave es el nombre del Blok en Storyblok. En este caso, es `blogPost`. -- El valor es la ruta al componente. En este caso, es `storyblok/BlogPost`. - -:::caution - La `key` debe coincidir exactamente con el nombre del Blok en Storyblok para que se referencie correctamente. Si no coinciden, o estás intentando referenciar un componente que no existe en Storyblok, obtendrás un error. -::: - -```js title="astro.config.mjs" ins={12} -import { defineConfig } from 'astro/config'; -import storyblok from '@storyblok/astro'; -import { loadEnv } from 'vite'; - -const env = loadEnv("", process.cwd(), 'STORYBLOK'); - -export default defineConfig({ - integrations: [ - storyblok({ - accessToken: env.STORYBLOK_TOKEN, - components: { - blogPost: 'storyblok/BlogPost', - }, - apiOptions: { - region: 'us', - }, - }) - ], -}); -``` - -### Obteniendo Datos - -Para probar la configuración, en Storyblok crea una nueva historia con el tipo de contenido `blogPost` llamada `test-post`. -En Astro, crea una nueva página en el directorio `src/pages/` llamada `test-post.astro` con el siguiente contenido: - -```astro title="src/pages/test-post.astro" ---- -import { useStoryblokApi } from '@storyblok/astro' -import StoryblokComponent from '@storyblok/astro/StoryblokComponent.astro' - -const storyblokApi = useStoryblokApi() - -const { data } = await storyblokApi.get("cdn/stories/test-post", { - version: import.meta.env.DEV ? "draft" : "published", -}); - -const content = data.story.content; ---- - -``` - -Para consultar tus datos, utiliza el gancho `useStoryblokApi`. Esto inicializará una nueva instancia del cliente utilizando la configuración de integración que has establecido. - -Para renderizar tu contenido, pasa la propiedad `content` del Story al componente `StoryblokComponent` como una prop `blok`. Este componente renderizará los Bloks que están definidos dentro de la propiedad `content` property. En este caso, renderizará el componente `BlogPost`. - -## Creando un blog con Astro y Storyblok - -Con la configuración de integración establecida, ahora puedes crear un blog con Astro y Storyblok. - -### Prerrequisitos - -1. **Un espacio de Storyblok** - Para este tutorial, recomendamos utilizar un espacio nuevo. Si ya tienes un espacio con bloques (Bloks), siéntete libre de utilizarlos, pero deberás modificar el código para que coincida con los nombres de los bloques y los tipos de contenido. - -2. **Un proyecto de Astro integrado con Storyblok** - Consulta [la sección de integración con Astro](#integración-con-astro) para obtener instrucciones sobre cómo configurar la integración. - -### Creando una biblioteca blok - -Para crear bloques, ve a la aplicación de Storyblok y haz clic en la pestaña de **Block Library**. Haz clic en el botón + New blok y crea los siguientes bloques: - -1. `blogPost` - Un tipo de contenido Blok con los siguientes campos: - - `title` - Un campo de texto - - `description` - Un campo de texto - - `content` - Un campo de texto enriquecido - -2. `blogPostList` - Un Blok anidado vacío - -3. `page` - Un tipo de contenido Blok con los siguientes campos: - - `body` - Un Blok anidado - -### Creando contenido - -Para agregar nuevo contenido, ve a la sección de contenido haciendo clic en la pestaña de **Content**. Utilizando la biblioteca de Bloks que creaste en el paso anterior, crea las siguientes historias: - -1. `home` - Un story de tipo de contenido con el Blok `page`. Dentro del campo `body`, agrega un Blok `blogPostList`. - -2. `blog/no-javascript` - Un story con el tipo de contenido `blogPost` dentro de la carpeta del blog. - ```yaml - title: No JavaScript - description: A sample blog post - content: Hi there! This blog post doesn't use JavaScript. - ``` -3. `blog/astro-is-amazing` - Un story con el tipo de contenido `blogPost` dentro de la carpeta del blog. - ```yaml - title: Astro is amazing - description: We love Astro - content: Hi there! This blog post was build with Astro. - ``` - -Ahora que tienes tu contenido listo, regresa a tu proyecto de Astro y comienza a construir tu blog. - -### Conectando Bloks a componentes - -Para conectar los Bloks recién creados a los componentes de Astro, crea una nueva carpeta llamada `storyblok` en tu directorio `src` y agrega los siguientes archivos: - -`Page.astro` es un componente de tipo de contenido de Blok anidado que renderizará de forma recursiva todos los Bloks dentro de la propiedad `body` del Blok `page`. También agrega los atributos `storyblokEditable` al elemento padre, lo que nos permitirá editar la página en Storyblok. - -```astro title="src/storyblok/Page.astro" ---- -import { storyblokEditable } from '@storyblok/astro' -import StoryblokComponent from "@storyblok/astro/StoryblokComponent.astro"; -const { blok } = Astro.props ---- - -
- { - blok.body?.map((blok) => { - return - }) - } -
-``` - -`BlogPost.astro` renderizará las propiedades `title`, `description` y `content` del Blok `blogPost`. - -Para transformar la propiedad `content` de un campo de texto enriquecido a HTML, puedes utilizar la función auxiliar `renderRichText`. - -```astro title="src/storyblok/BlogPost.astro" ---- -import { storyblokEditable, renderRichText } from '@storyblok/astro' -const { blok } = Astro.props -const content = renderRichText(blok.content) ---- -
-

{blok.title}

-

{blok.description}

- -
-``` - -`BlogPostList.astro` es un componente de tipo de contenido de Blok anidado que renderizará una lista de vistas previas de publicaciones de blog. - -Utiliza el hook `useStoryblokApi` para obtener todas los stories con el tipo de contenido `blogPost`. Utiliza el parámetro de consulta `version` para obtener las versiones en borrador de las historias cuando se encuentra en modo de desarrollo y las versiones publicadas al compilar para producción. - -`Astro.props` se utiliza para configurar el editor en Storyblok. Aquí también se pueden pasar propiedades adicionales a tu componente, si es necesario. -```astro title="src/storyblok/BlogPostList.astro" ---- -import { storyblokEditable } from '@storyblok/astro' -import { useStoryblokApi } from '@storyblok/astro' - -const storyblokApi = useStoryblokApi(); - -const { data } = await storyblokApi.get('cdn/stories', { - version: import.meta.env.DEV ? "draft" : "published", - content_type: 'blogPost', -}) - -const posts = data.stories.map(story => { - return { - title: story.content.title, - date: new Date(story.published_at).toLocaleDateString("en-US", {dateStyle: "full"}), - description: story.content.description, - slug: story.full_slug, - } -}) - -const { blok } = Astro.props ---- - -
    - {posts.map(post => ( -
  • - - {post.title} -

    {post.description}

    -
  • - ))} -
-``` - -Finalmente, agrega tus componentes a la propiedad `components` del objeto de configuración `storyblok` en `astro.config.mjs`. La clave es el nombre del Blok en Storyblok y el valor es la ruta al componente relativa a `src`. - -```js title="astro.config.mjs" ins={12-14} -import { defineConfig } from 'astro/config'; -import storyblok from '@storyblok/astro'; -import { loadEnv } from 'vite'; - -const env = loadEnv("", process.cwd(), 'STORYBLOK'); - -export default defineConfig({ - integrations: [ - storyblok({ - accessToken: env.STORYBLOK_TOKEN, - components: { - blogPost: 'storyblok/BlogPost', - blogPostList: 'storyblok/BlogPostList', - page: 'storyblok/Page', - }, - apiOptions: { - region: 'us', - }, - }) - ], -}); -``` - -### Generando páginas - -Para crear una ruta para una `página` especifica, puedes obtener su contenido directamente desde la API de Storyblok y pasarlo al componente `StoryblokComponent`. Asegúrate de haber agregado el componente `Page` a tu archivo astro.config.mjs. - -Crea un archivo `index.astro` dentro de `src/pages/` para renderizar la página `home`: - -```astro title="src/pages/index.astro" {3,7,8,9,17} ---- -import { useStoryblokApi } from '@storyblok/astro' -import StoryblokComponent from '@storyblok/astro/StoryblokComponent.astro' -import BaseLayout from '../layouts/BaseLayout.astro' - -const storyblokApi = useStoryblokApi(); -const { data } = await storyblokApi.get('cdn/stories/home', { - version: import.meta.env.DEV ? "draft" : "published", -}); -const content = data.story.content; ---- - - - Storyblok & Astro - - - - - -``` - -Para generar páginas para todas tus publicaciones de blog, crea una página `.astro` que creará rutas dinámicas. Este enfoque varía dependiendo de si estás utilizando la **generación de sitios estáticos** (la opción predeterminada) o **el renderizado en el lado del servidor**. - -#### Generación de sitio estático - -If you are using Astro's default static site generation, you will use [dynamic routes](/es/guides/routing/#rutas-dinámicas) and the `getStaticPaths` function to generate your project pages. - -Crea un nuevo directorio `src/pages/blog/` y agrega un nuevo archivo llamado `[...slug].astro` con el siguiente código: - -```astro title="src/pages/blog/[...slug].astro" ---- -import { useStoryblokApi } from '@storyblok/astro' -import StoryblokComponent from '@storyblok/astro/StoryblokComponent.astro' - -export async function getStaticPaths() { - const sbApi = useStoryblokApi(); - - const { data } = await sbApi.get("cdn/stories", { - content_type: "blogPost", - version: import.meta.env.DEV ? "draft" : "published", - }); - - const stories = Object.values(data.stories); - - return stories.map((story) => { - return { - params: { slug: story.slug }, - }; - }); -} - -const sbApi = useStoryblokApi(); -const { slug } = Astro.params; -const { data } = await sbApi.get(`cdn/stories/${slug}`, { - version: import.meta.env.DEV ? "draft" : "published", -}); - -const story = data.story; ---- - - - - Storyblok & Astro - - - - - -``` - -Este archivo generará una página para cada historia, con el slug y contenido obtenidos de la API de Storyblok. - -:::note -Cuando agregues carpetas dentro de Storyblok, inclúyelas en el slug al interactuar con la API de Storyblok. Por ejemplo, en la solicitud GET anterior, podemos usar **cdn/stories/blog**, con una carpeta blog adentro en lugar de usarlas en la raíz. -::: - -#### Renderizado en el lado del servidor - -Si has [optado por el modo de SSR](/es/guides/on-demand-rendering/), utilizarás rutas dinámicas para obtener los datos de la página desde Storyblok. - -Crea un nuevo directorio `src/pages/blog/` y agrega un nuevo archivo llamado `[...slug].astro` con el siguiente código: - -```astro title="src/pages/blog/[...slug].astro" ---- -import { useStoryblokApi } from '@storyblok/astro' -import StoryblokComponent from '@storyblok/astro/StoryblokComponent.astro' -const storyblokApi = useStoryblokApi() -const slug = Astro.params.slug; -let content; -try { - const { data } = await storyblokApi.get(`cdn/stories/${slug}`, { - version: import.meta.env.DEV ? "draft" : "published", - }); - content = data.story.content -} catch (error) { - return Astro.redirect('/404') -} ---- - - - Storyblok y Astro - - - - - -``` - -Este archivo obtendrá y renderizará los datos de la página desde Storyblok que coincidan con el parámetro dinámico `slug`. - -Dado que estás utilizando una redirección a `/404`, crea una página de error 404 en `src/pages`: - -```astro title="src/pages/404.astro" - - - No encontrado - - -

Lo siento, esta página no existe

- - -``` - -Si no se encuentra la story, la solicitud se redirigirá a la página 404. - -### Publicando tu sitio - -Para implementar tu sitio web, visita nuestras [guías de despliegue](/es/guides/deploy/) y sigue las instrucciones para tu proveedor de alojamiento preferido. - -#### Volver a compilar según los cambios en Storyblok - -Si tu proyecto utiliza el modo estático predeterminado de Astro, deberás configurar un webhook para desencadenar una nueva compilación cuando cambie tu contenido. Si estás utilizando Netlify o Vercel como proveedor de alojamiento, puedes utilizar su función de webhook para desencadenar una nueva compilación a partir de los eventos de Storyblok. - -##### Netlify - -Para configurar un webhook en Netlify: - - -1. Ve al panel de administración de tu sitio en Netlify y haz clic en**Build & deploy**. - -2. Bajo la pestaña **Continuous Deployment**, encuentra la sección de **Build hooks** y haz clic en **Add build hook**. - -3. Proporciona un nombre para tu webhook y selecciona la rama en la que deseas activar la compilación. Haz clic en **Save** y copia la URL generada. - - -##### Vercel - -Para configurar un webhook en Vercel: - - -1. Ve al panel de control de tu proyecto y haz clic en **Settings**. - -2. Bajo la pestaña **Git**, encuentra la sección **Deploy Hooks**. - -3. Proporciona un nombre para tu webhook y la rama en la que deseas activar la compilación. Haz clic en **Add** y copia la URL generada. - - -##### Añadiendo un webhook a Storyblok - -En la sección **Settings** de tu espacio de Storyblok, haz clic en la pestaña **Webhooks**. Pega la URL del webhook que copiaste en el campo **Story published & unpublished** y haz clic en Save para crear el webhook. - -Ahora, cada vez que publiques una nueva historia, se desencadenará una nueva compilación y tu blog se actualizará. - -## Recursos Oficiales - -- Storyblok ofrece una [integración de Astro](https://www.storyblok.com/mp/announcing-storyblok-astro) para agregar Storyblok a tu proyecto. - -## Oficiales de la comunidad - -- [Conseguir que el Editor Visual funcione para Storyblok + Astro](https://dev.to/sandrarodgers/getting-the-visual-editor-to-work-for-storyblok-astro-2gja) por Sandra Rodgers -- [Astro + Storyblok: previsualización SSR para una edición visual instantánea](https://dev.to/jgierer12/astro-storyblok-ssr-preview-for-instant-visual-editing-3g9m) por Jonas Gierer -- [Astro-Storyblok previsualiza un sitio con la función Branch Deploys de Netlify](https://dev.to/sandrarodgers/astro-storyblok-previews-site-with-netlifys-branch-deploys-feature-44dh) por Sandra Rodgers diff --git a/src/content/docs/es/guides/cms/strapi.mdx b/src/content/docs/es/guides/cms/strapi.mdx deleted file mode 100644 index d781f9499f415..0000000000000 --- a/src/content/docs/es/guides/cms/strapi.mdx +++ /dev/null @@ -1,433 +0,0 @@ ---- -title: Strapi y Astro -description: Agrega contenido a tu proyecto de Astro utilizando el headless CMS de Strapi. -type: cms -service: Strapi -stub: false -i18nReady: true ---- -import { Steps } from '@astrojs/starlight/components'; -import { FileTree } from '@astrojs/starlight/components'; -import PackageManagerTabs from '~/components/tabs/PackageManagerTabs.astro'; - -[Strapi](https://strapi.io/) es un headless CMS de código abierto y personalizable. - -## Integración con Astro - -Esta guía creará una función wrapper para conectar Strapi con Astro. - -### Prerrequisitos - -Para comenzar, necesitarás tener lo siguiente: - -1. **Un proyecto de Astro** - Si aún no tienes un proyecto de Astro, nuestra [guía de instalación](/es/install-and-setup/) te ayudará a poner en marcha en poco tiempo. -2. **Un servidor de Strapi CMS** - Puedes [configurar un servidor de Strapi en un entorno local](https://docs.strapi.io/dev-docs/quick-start). - -### Agregando la URL de Strapi en el archivo `.env`. - -Para agregar la URL de Strapi a Astro, crea un archivo `.env` en la raíz de tu proyecto (si aún no existe) y agrega la siguiente variable: - -```ini title=".env" -STRAPI_URL="http://127.0.0.1:1337" # o usa tu dirección IP -``` - -Reinicia el servidor de desarrollo para utilizar esta variable de entorno en tu proyecto Astro. - -Si deseas tener IntelliSense para tu variable de entorno, puedes crear un archivo `env.d.ts` en el directorio `src/` y configurar `ImportMetaEnv` de la siguiente manera: - -```ts title="src/env.d.ts" -interface ImportMetaEnv { - readonly STRAPI_URL: string; -} -``` - -Ahora tu directorio raíz debería incluir el/los nuevos archivo(s): - - - - src/ - - **env.d.ts** - - **.env** - - astro.config.mjs - - package.json - - -### Creando el wrapper de la API - -Crea un nuevo archivo en `src/lib/strapi.ts` y agrega la siguiente función envolvente para interactuar con la API de Strapi: - -```ts title="src/lib/strapi.ts" -interface Props { - endpoint: string; - query?: Record; - wrappedByKey?: string; - wrappedByList?: boolean; -} - -/** - * Obtiene datos de la API de Strapi. - * @param endpoint - El endpoint para realizar la consulta - * @param query - Los parámetros de consulta para agregar a la URL - * @param wrappedByKey - La clave para desempaquetar la respuesta - * @param wrappedByList - Si la respuesta es una lista, desempaquétala. - * @returns - */ -export default async function fetchApi({ - endpoint, - query, - wrappedByKey, - wrappedByList, -}: Props): Promise { - if (endpoint.startsWith('/')) { - endpoint = endpoint.slice(1); - } - - const url = new URL(`${import.meta.env.STRAPI_URL}/api/${endpoint}`); - - if (query) { - Object.entries(query).forEach(([key, value]) => { - url.searchParams.append(key, value); - }); - } - const res = await fetch(url.toString()); - let data = await res.json(); - - if (wrappedByKey) { - data = data[wrappedByKey]; - } - - if (wrappedByList) { - data = data[0]; - } - - return data as T; -} -``` - -Esta función requiere un objeto con las siguientes propiedades: - -1. `endpoint` - El endpoint desde el cual estás obteniendo datos. -2. `query` - Los parámetros de consulta para agregar al final de la URL. -3. `wrappedByKey` - La clave `data` en el objeto que envuelve tu `Response`. -4. `wrappedByList` - Un parámetro para "desempaquetar" la lista devuelta por Strapi y devolver solo el primer elemento. - -### Opcional: Creando la interfaz Article - -Si estás utilizando TypeScript, crea la siguiente interfaz Article en el archivo `src/interfaces/article.ts` para que coincida con los tipos de contenido de Strapi: - -```ts title="src/interfaces/article.ts" -export default interface Article { - id: number; - attributes: { - title: string; - description: string; - content: string; - slug: string; - createdAt: string; - updatedAt: string; - publishedAt: string; - }; -} -``` - -:::note -Puedes modificar esta interfaz o crear múltiples interfaces para que se correspondan con los datos de tu propio proyecto. -::: - - - - src/ - - interfaces/ - - **article.ts** - - lib/ - - strapi.ts - - env.d.ts - - .env - - astro.config.mjs - - package.json - - -### Mostrando una lista de artículos - - -1. Actualiza tu página de inicio `src/pages/index.astro` para mostrar una lista de publicaciones de blog, cada una con una descripción y un enlace a su propia página. - -2. Importa la función wrapper y la interfaz. Agrega la siguiente llamada a la API para obtener tus artículos y devolver una lista: - - ```astro title="src/pages/index.astro" - --- - import fetchApi from '../lib/strapi'; - import type Article from '../interfaces/article'; - - const articles = await fetchApi({ - endpoint: 'articles', // el tipo de contenido a obtener - wrappedByKey: 'data', // la clave para descomponer la respuesta - }); - --- - ``` - - La llamada a la API solicita datos desde `http://localhost:1337/api/articles` y devuelve `articles`: un array de objetos JSON que representan tus datos: - - ```json - [ - { - id: 1, - attributes: { - title: "What's inside a Black Hole", - description: "Maybe the answer is in this article, or not...", - content: "Well, we don't know yet...", - slug: "what-s-inside-a-black-hole", - createdAt: "2023-05-28T13:19:46.421Z", - updatedAt: "2023-05-28T13:19:46.421Z", - publishedAt: "2023-05-28T13:19:45.826Z" - } - }, - // ... - ] - ``` - -3. Utilizando los datos del array `articles` devuelto por la API, muestra tus publicaciones de blog de Strapi en una lista. Estas publicaciones estarán vinculadas a sus propias páginas individuales, las cuales crearás en el siguiente paso. - - ```astro title="src/pages/index.astro" - --- - import fetchApi from '../lib/strapi'; - import type Article from '../interfaces/article'; - - const articles = await fetchApi({ - endpoint: 'articles?populate=image', - wrappedByKey: 'data', - }); - --- - - - - - Strapi y Astro - - - -
- -
- - - ``` -
- -### Generando páginas de artículos. - -Crea el archivo `src/pages/blog/[slug].astro` para [generar dinámicamente una página](/es/guides/routing/#rutas-dinámicas) para cada artículo. - - - - src/ - - interfaces/ - - article.ts - - lib/ - - strapi.ts - - pages/ - - index.astro - - blog/ - - **[slug].astro** - - env.d.ts - - .env - - astro.config.mjs - - package.json - - -#### Generación de sitios estáticos - -En el modo estático predeterminado de Astro (SSG), utiliza [`getStaticPaths()`](/es/reference/api-reference/#getstaticpaths) para obtener tu lista de artículos desde Strapi. - -```astro title="src/pages/blog/[slug].astro ---- -import fetchApi from '../../lib/strapi'; -import type Article from '../../interfaces/article'; - -export async function getStaticPaths() { - const articles = await fetchApi({ - endpoint: 'articles', - wrappedByKey: 'data', - }); - - return articles.map((article) => ({ - params: { slug: article.attributes.slug }, - props: article, - })); -} -type Props = Article; - -const article = Astro.props; ---- -``` - -Crea la plantilla para cada página utilizando las propiedades de cada objeto de publicación. - - -```astro title="src/pages/blog/[slug].astro ins={21-43} ---- -import fetchApi from '../../lib/strapi'; -import type Article from '../../interfaces/article'; - -export async function getStaticPaths() { - const articles = await fetchApi({ - endpoint: 'articles', - wrappedByKey: 'data', - }); - - return articles.map((article) => ({ - params: { slug: article.attributes.slug }, - props: article, - })); -} -type Props = Article; - -const article = Astro.props; ---- - - - - - {article.attributes.title} - - - -
- - -

{article.attributes.title}

- - -

{article.attributes.content}

- - - {article.attributes.content} - - - -
- - -``` -:::tip -Asegúrate de elegir el renderizado adecuado para tu contenido. Para Markdown, consulta nuestra [guía de Markdown](/es/guides/markdown-content/). Si estás representando HTML, consulta [esta guía](/es/reference/directives-reference/#sethtml) para asegurar la seguridad. -::: - -#### Renderizado en el lado del servidor - -Si has [optado por el modo SSR](/es/guides/on-demand-rendering/) con `output: server` o `output: hybrid`, [genera tus rutas dinámicas](/es/guides/routing/#modo-servidor-ssr) utilizando el siguiente código: - -Crea el archivo `src/pages/blog/[slug].astro`: - -```astro title="src/pages/blog/[slug].astro" ---- -import fetchApi from '../../../lib/strapi'; -import type Article from '../../../interfaces/article'; - -const { slug } = Astro.params; - -let article: Article; - -try { - article = await fetchApi
({ - endpoint: 'articles', - wrappedByKey: 'data', - wrappedByList: true, - query: { - 'filters[slug][$eq]': slug || '', - }, - }); -} catch (error) { - return Astro.redirect('/404'); -} ---- - - - - - {article.attributes.title} - - - -
- - -

{article.attributes.title}

- - -

{article.attributes.content}

- - - {article.attributes.content} - - - -
- - -``` - -Este archivo obtendrá y representará los datos de la página desde Strapi que coinciden con el parámetro dinámico `slug`. - -Dado que estás utilizando una redirección a `/404`, crea una página 404 en `src/pages`: - -```astro title="src/pages/404.astro" - - - No encontrada - - -

Lo siento, esta página no existe.

- - - -``` - -Si el artículo no se encuentra, el usuario será redirigido a esta página de error 404 y será recibido por un encantador gato. - -### Publicando tu sitio - -Para desplegar tu sitio web, visita nuestras [guías de implementación](/es/guides/deploy/) y sigue las instrucciones para el proveedor de hosting que prefieras. - -#### Volver a compilar en caso de cambios - -Si tu proyecto está utilizando el modo estático predeterminado de Astro, deberás configurar un webhook para desencadenar una nueva compilación cuando tu contenido cambie. Si estás utilizando Netlify o Vercel como proveedor de hosting, puedes utilizar su función de webhook para desencadenar una nueva compilación desde Strapi. - -##### Netlify - -Para configurar un webhook en Netlify: - - -1. Ve al panel de control de tu sitio y haz clic en **Build & deploy**. - -2. En la pestaña **Continuous Deployment**, encuentra la sección **Build hooks** y haz clic en **Add build hook**. - -3. Proporciona un nombre para tu webhook y selecciona la rama en la que deseas desencadenar la compilación. Haz clic en **Save** y copia la URL generada. - - -##### Vercel - -Para configurar un webhook en Vercel: - - -1. Ve al panel de control de tu proyecto y haz clic en **Settings**. - -2. En la pestaña **Git**, busca la sección **Deploy Hooks**. - -3. Proporciona un nombre para tu webhook y la rama en la que deseas desencadenar la compilación. Haz clic en **Add** y copia la URL generada. - - -##### Agregando un webhook a Strapi - -Sigue [la guía de webhooks de Strapi](https://strapi.io/blog/webhooks) para crear un webhook en tu panel de administración de Strapi. - -## Recursos oficiales - -- [Guía de Blog de Strapi para React](https://strapi.io/blog/build-a-blog-with-next-react-js-strapi) por Strapi diff --git a/src/content/docs/es/guides/cms/tina-cms.mdx b/src/content/docs/es/guides/cms/tina-cms.mdx deleted file mode 100644 index 69888f29e905f..0000000000000 --- a/src/content/docs/es/guides/cms/tina-cms.mdx +++ /dev/null @@ -1,167 +0,0 @@ ---- -title: Tina CMS & Astro -description: Agrega contenido a tu proyecto Astro usando Tina como CMS -type: cms -stub: false -service: Tina CMS -i18nReady: true ---- -import PackageManagerTabs from '~/components/tabs/PackageManagerTabs.astro'; -import Grid from '~/components/FluidGrid.astro'; -import Card from '~/components/ShowcaseCard.astro'; -import { Steps } from '@astrojs/starlight/components'; - -[Tina CMS](https://tina.io/) es un sistema de gestión de contenido sin servidor respaldado por Git. - -## Integración con Astro - -Para empezar, necesitarás un proyecto Astro existente. - - -1. Ejecuta el siguiente comando para instalar Tina en tu proyecto Astro. - - - - ```shell - npx @tinacms/cli@latest init - ``` - - - ```shell - pnpx @tinacms/cli@latest init - ``` - - - ```shell - yarn dlx @tinacms/cli@latest init - ``` - - - - - Cuando se te pregunte ingresar un Cloud ID, presione Enter para omitir. Generará uno más tarde si desea usar Tina Cloud. - - Cuando se te pregunte "¿Qué framework estás usando?", escoge **Otro**. - - Cuando se te pregunte donde se almacenan los archivos del directorio public, presione Enter. - - Depués de haber terminado lo anterior, deberías tener una carpeta `.tina` en la raíz de tu proyecto y un archivo `hello-world.md` generado en `content/posts/hello-world.md`. - -2. Cambia el script `dev` en `package.json`: - - - - ```json del={4} ins={5} - // package.json - { - "scripts": { - "dev": "astro dev", - "dev": "tinacms dev -c \"astro dev\"" - } - } - ``` - - - ```json del={4} ins={5} - // package.json - { - "scripts": { - "dev": "astro dev", - "dev": "tinacms dev -c \"astro dev\"" - } - } - ``` - - - ```json del={4} ins={5} - // package.json - { - "scripts": { - "dev": "astro dev", - "dev": "tinacms dev -c \"astro dev\"" - } - } - ``` - - - -3. Ahora TinaCMS está configurado en modo local. Prueba esto ejecutando el script `dev`, luego navega a `/admin/index.html#/collections/post`. - - Editando el archivo "Hello, World!" actualizará el archivo `content/posts/hello-world.md` en el directorio de tu proyecto. - -4. Configura tus colecciones Tina editando la propiedad `schema.collections` en `.tina/config.ts`. - - Por ejemplo, puedes agregar una propiedad frontmatter requerida "date posted"(fecha de publicación) a nuestros posts: - - ```js title=".tina/config.ts" ins={35-40} - import { defineConfig } from "tinacms"; - - // Tu proveedor de hosting probablemente exponga esto como una variable de entorno - const branch = process.env.HEAD || process.env.VERCEL_GIT_COMMIT_REF || "main"; - - export default defineConfig({ - branch, - clientId: null, // Obtén esto de tina.io - token: null, // Obtén esto de tina.io - build: { - outputFolder: "admin", - publicFolder: "public", - }, - media: { - tina: { - mediaRoot: "images", - publicFolder: "public", - }, - }, - schema: { - collections: [ - { - name: "posts", - label: "Posts", - path: "src/content/posts", - format: 'mdx', - fields: [ - { - type: "string", - name: "title", - label: "Title", - isTitle: true, - required: true, - }, - { - type: "datetime", - name: "posted", - label: "Date Posted", - required: true, - }, - { - type: "rich-text", - name: "body", - label: "Body", - isBody: true, - }, - ], - }, - ], - }, - }); - ``` - - Aprende más sobre las colecciones Tina [en la documentación de Tina](https://tina.io/docs/reference/collections/). - -5. En producción, TinaCMS puede hacer commit de los cambios directamente a tu repositorio de GitHub. Para configurar TinaCMS para producción, puedes elegir usar [Tina Cloud](https://tina.io/docs/tina-cloud/) o auto-hospedar la [Tina Data Layer](https://tina.io/docs/self-hosted/overview/). Puedes [leer más sobre el registro para Tina Cloud](https://app.tina.io/register) en la documentación de Tina. - - -## Recursos Oficiales - -- [Guía de integración de TinaCMS con Astro](https://tina.io/docs/frameworks/astro/). - -## Recursos de la comunidad - -- [Plantilla de inicio de Tina y Astro con edición visual](https://github.com/dawaltconley/tina-astro) por Jeff See y Dylan Awalt-Conley -- [Plantilla de inicio de Tina con Astro](https://github.com/tombennet/astro-tina-starter/tree/main) por Tom Bennet -- [Utilizando la Optimización de Imágenes de Astro con Tina](https://joschua.io/posts/2023/08/16/how-to-use-astro-assets-with-tina-cms/) - -## Temas - - - - - diff --git a/src/content/docs/es/guides/cms/umbraco.mdx b/src/content/docs/es/guides/cms/umbraco.mdx index fcf766f93e336..0beb112d552fc 100644 --- a/src/content/docs/es/guides/cms/umbraco.mdx +++ b/src/content/docs/es/guides/cms/umbraco.mdx @@ -152,7 +152,7 @@ const articles = await res.json(); ### Generación de entradas de blog individuales -Crea el archivo `[...slug].astro` en la raíz del directorio `/pages/`. Este archivo se utilizará para [generar las páginas de blog individuales dinámicamente](/es/guides/routing/#rutas-dinámicas). +Crea el archivo `[...slug].astro` en la raíz del directorio `/pages/`. Este archivo se utilizará para [generar las páginas de blog individuales dinámicamente](/es/guides/routing/#dynamic-routes). Ten en cuenta que la propiedad `params`, que genera la ruta URL de la página, contiene `article.route.path` de la obtención de la API. De manera similar, la propiedad `props` debe incluir el `article` completo para que puedas acceder a toda la información en tu entrada del CMS. diff --git a/src/content/docs/es/guides/cms/wordpress.mdx b/src/content/docs/es/guides/cms/wordpress.mdx deleted file mode 100644 index f8a508886c0e9..0000000000000 --- a/src/content/docs/es/guides/cms/wordpress.mdx +++ /dev/null @@ -1,193 +0,0 @@ ---- -title: Headless WordPress y Astro -description: Agrega contenido a tu proyecto Astro usando WordPress como CMS -type: cms -stub: false -service: WordPress -i18nReady: true ---- -import { FileTree } from '@astrojs/starlight/components'; -import Grid from '~/components/FluidGrid.astro' -import Card from '~/components/ShowcaseCard.astro' - -[WordPress](https://wordpress.org/) es una plataforma de gestión de contenidos que incluye su propio frontend, pero también puede ser usada como un CMS headless para proveer contenido a tu proyecto Astro. - -## Integración con Astro - -WordPress viene con una [API REST de WordPress](https://developer.wordpress.org/rest-api/) integrada para conectar tus datos de WordPress a Astro. Opcionalmente puedes instalar [WPGraphQL](https://wordpress.org/plugins/wp-graphql/) o [Gato GraphQL](https://wordpress.org/plugins/gatographql/) en tu sitio para usar GraphQL. - -### Prerrequisitos - -Para empezar, necesitarás lo siguiente: - -1. **Un proyecto Astro** - Si no tienes un proyecto Astro aún, nuestra [guía de instalación](/es/install-and-setup/) te ayudará a empezar en cuestión de minutos. -2. **Un sitio WordPress** - La URL de la API REST es `[YOUR_SITE]/wp-json/wp/v2/` y está disponible por defecto con cualquier sitio WordPress. También es posible [configurar WordPress en un entorno local](https://wordpress.org/support/article/installing-wordpress-on-your-own-computer/). - -### Configurando Credenciales - -Tu API REST de WordPress está disponible para solicitudes externas de datos sin autenticación por defecto. Esto no permite a los usuarios modificar tus datos o configuraciones de tu sitio y te permite usar tus datos en tu proyecto Astro sin ninguna credencial. - -Puedes elegir [requerir autenticación](https://developer.wordpress.org/rest-api/frequently-asked-questions/#require-authentication-for-all-requests) si es necesario. - -### Obteniendo Datos - -Obtén tus datos de WordPress a través de la URL única de tu API REST y la ruta para tu contenido. (Para un blog, esto será comúnmente `posts`). Luego, puedes renderizar tus propiedades de datos usando la directiva `set:html={}` de Astro. - -Por ejemplo, para mostrar una lista de títulos de post y su contenido: - -```astro title="src/pages/index.astro" ---- -const res = await fetch("https://[YOUR-SITE]/wp-json/wp/v2/posts"); -const posts = await res.json(); ---- -

Astro + WordPress 🚀

-{ - posts.map((post) => ( -

-

- )) -} -``` - -La API REST de WordPress incluye [parámetros globales](https://developer.wordpress.org/rest-api/using-the-rest-api/global-parameters/) como `_fields` y `embed`. - -Una gran cantidad de datos están disponible a través de esta API, por lo que puede que desees solo obtener ciertos campos. Puedes restringir tu respuesta agregando el parámetro [`_fields`](https://developer.wordpress.org/rest-api/using-the-rest-api/global-parameters/#_fields) a la URL de la API, por ejemplo: `[YOUR-SITE]/wp/v2/posts?_fields=author,id,excerpt,title,link` - -La API puede regresar contenido relacionado con tu artículo, como un link al artículo padre, o a los comentarios del artículo. Puedes agregar el parámetro [`_embed`](https://developer.wordpress.org/rest-api/using-the-rest-api/global-parameters/#_embed) a la URL de la API (por ejemplo: `[YOUR-SITE]/wp/v2/posts?_embed`) para indicarle al servidor que la respuesta debe incluir estos recursos embebidos. - -## Creando un blog con WordPress y Astro - -En este ejemplo obtendremos los datos de la API pública de WordPress de [https://norian.studio/dinosaurs/](https://norian.studio/dinosaurs/). Este sitio de WordPress almacena información sobre dinosaurios individuales bajo la ruta `dinos`, al igual que un blog almacenaría entradas individuales de blog bajo la ruta `posts`. - -Este ejemplo demuestra la estructura de sitio en Astro: una página índice que lista dinosaurios con enlaces a páginas de dinosaurios generadas dinámicamente. - -:::note -Para usar [Tipos de Post Personalizados (CPT)](https://learn.wordpress.org/lesson-plan/custom-post-types/) en tu API de WordPress (no solo `post` y `page`), tendrás que [configurarlos en tu panel de WordPress](https://stackoverflow.com/questions/48536646/how-can-i-get-data-from-custom-post-type-using-wp-rest-api) o [agregar soporte REST API para tipos de contenido personalizados](https://developer.wordpress.org/rest-api/extending-the-rest-api/adding-rest-api-support-for-custom-content-types/) en WordPress. - -En este ejemplo los datos se obtienen de un sitio WordPress cuyos tipos de contenido ya han sido configurados y expuestos a la API REST. -::: - -### Mostrando una lista de entradas de WordPress - -Esta página `src/pages/index.astro` enlista cada dinosaurio, con una descripción y un enlace a su propia página. - - -- src/ - - pages/ - - **index.astro** - - dinos/ - - [slug].astro -- astro.config.mjs -- package.json - - -Obteniendo los datos a través de la API devuelve un objeto que incluye las propiedades: - -- `title.rendered` - Contiene la representación HTML del título del post. -- `content.rendered` - Contiene la representación HTML del contenido del post. -- `slug` - Contiene el slug del post. (Esto proporciona el enlace a las páginas de dinosaurios generadas dinámicamente.) - -```astro title="/src/pages/index.astro" ---- -import Layout from "../layouts/Layout.astro"; - -let res = await fetch("https://norian.studio/wp-json/wp/v2/dinos") -let posts = await res.json(); ---- - -

-

Lista de Dinosaurios

- { - posts.map((post) => ( - - )) - } -
- -``` - -### Usando la API de WordPress para generar páginas - -La página `src/pages/dinos/[slug].astro` [genera dinámicamente una página](/es/guides/routing/#rutas-dinámicas) para cada dinosaurio. - -```astro title="/src/pages/dinos/[slug].astro" ---- -import Layout from '../../layouts/Layout.astro'; - -const { slug } = Astro.params; - -let res = await fetch(`https://norian.studio/wp-json/wp/v2/dinos?slug=${slug}`); -let [post] = await res.json(); - -// Se requiere la función getStaticPaths() para sitios estáticos en Astro. -// Si estás utilizando SSR, no necesitarás esta función. -export async function getStaticPaths() { - let data = await fetch("https://norian.studio/wp-json/wp/v2/dinos"); - let posts = await data.json(); - - return posts.map((post) => ({ - params: { slug: post.slug }, - props: { post: post }, - })); -} ---- - -
-

- -

-
-``` - -### Devolviendo recursos embebidos - -Los parámetros de consulta `_embed` indican al servidor que devuelva recursos relacionados (incrustados). - -```astro title="src/pages/dinos/[slug].astro" /&_embed/ ---- -const { slug } = Astro.params; - -let res = await fetch(`https://norian.studio/wp-json/wp/v2/dinos?slug=${slug}&_embed`); -let [post] = await res.json(); ---- -``` - -La propiedad `_embedded['wp:featuredmedia']['0'].media_details.sizes.medium.source_url` devuelve una imagen destacada en cada página de dinosaurio. (Reemplaza `medium` con el tamaño de imagen deseado). - -```astro title="/src/pages/dinos/[slug].astro" {3} - -
- -

- -

-
-``` - -### Publicando tu sitio - -Para desplegar tu sitio visita nuestras [guías de despliegue](/es/guides/deploy/) y sigue las instrucciones de tu proveedor de hosting preferido. - -## Recursos de la Comunidad - -- [Construyendo un sitio web Astro con WordPress como CMS Headless](https://blog.openreplay.com/building-an-astro-website-with-wordpress-as-a-headless-cms/) por Chris Bongers. -- [Construyendo con Astro x WordPress](https://www.youtube.com/watch?v=Jstqgklvfnc) en la transmisión de Ben Holmes. -- [Construyendo un sitio WordPress Headless con Astro](https://developers.wpengine.com/blog/building-a-headless-wordpress-site-with-astro) por Jeff Everhart -- [Astro y WordPress como API](https://darko.io/posts/wp-as-an-api/) por Darko Bozhinovski. - -## Sitios en Producción - -Los siguientes sitios usan Astro + WordPress en producción: - -- [Dinos!](https://wc-dinos.netlify.app/) por Anindo Neel Dutta — [código fuente en GitHub](https://github.com/leen-neel/astro-wordpress) - -## Temas - - - - diff --git a/src/content/docs/es/guides/configuring-astro.mdx b/src/content/docs/es/guides/configuring-astro.mdx deleted file mode 100644 index 847dc1de02930..0000000000000 --- a/src/content/docs/es/guides/configuring-astro.mdx +++ /dev/null @@ -1,171 +0,0 @@ ---- -title: Configuración de Astro -i18nReady: true ---- -import ReadMore from '~/components/ReadMore.astro' - -Personaliza cómo funciona Astro agregando un archivo `astro.config.mjs` en tu proyecto. Este es un archivo común en todos los proyectos de Astro; todos los ejemplos oficiales, sean plantillas o temas, cuentan con uno de forma predeterminada. - -Lee la [referencia de configuración](/es/reference/configuration-reference/) de Astro para obtener una descripción general y completa de todas las opciones de configuración. - -## Archivo de configuración de Astro - -Un archivo de configuración de Astro válido exporta la configuración usando la exportación `default`, además recomendamos usar `defineConfig` para definir la configuración de una manera más fácil. - -```js -// astro.config.mjs -import { defineConfig } from 'astro/config' - -export default defineConfig({ - // tus opciones de configuración van aquí... - // https://docs.astro.build/es/reference/configuration-reference/ -}) -``` - -Se recomienda usar `defineConfig()` para sugerencias de tipos automáticas en el IDE, pero también es opcional. Un archivo de configuración absolutamente mínimo y válido se vería así: - -```js title="astro.config.mjs" -// Ejemplo: Archivo de configuración mínimo y vacío -export default {} -``` - -## Tipos de archivo de configuración compatibles - -Astro es compatible con varios formatos de JavaScript para el archivo de configuración como: `astro.config.js`, `astro.config.mjs`, `astro.config.cjs` y `astro.config.ts`. Recomendamos usar `.mjs` en la mayoría de los casos o `.ts` si deseas escribir TypeScript en el archivo de configuración. - -La carga del archivo de configuración de TypeScript se maneja usando [`tsm`](https://github.com/lukeed/tsm) el cual respetará las opciones de tsconfig de su proyecto. - -## Resolución del archivo de configuración - -Astro intentará resolver automáticamente el archivo de configuración llamado `astro.config.mjs` dentro de la raíz del proyecto. Si no se encuentra ningún archivo de configuración en la raíz de su proyecto, se utilizarán las opciones predeterminadas de Astro. - -```bash -# Ejemplo: Lee la configuración desde ./astro.config.mjs -astro build -``` - -Puedes configurar explícitamente un archivo de configuración usando el indicador CLI `--config`. Este indicador CLI siempre se resuelve con relación a la carpeta de trabajo actual desde donde se ejecutó el comando CLI `astro`. - -```bash -# Ejemplo: Lee la configuración de este archivo -astro build --config my-config-file.js -``` - -## Configurar Intellisense - -Astro recomienda usar `defineConfig()` en el archivo de configuración. `defineConfig()` proporciona IntelliSense automático para tu IDE. Los editores como VSCode pueden leer las definiciones de tipo TypeScript y proporcionar sugerencias de tipos JSDoc automáticas, incluso si tu archivo de configuración no está escrito en TypeScript. - -```js -// astro.config.mjs -import { defineConfig } from 'astro/config' - -export default defineConfig({ - // tus opciones de configuración van aquí... - // https://docs.astro.build/es/reference/configuration-reference/ -}) -``` - -También puedes proporcionar definiciones de tipo manualmente a VSCode, utilizando la notación JSDoc: - -```js -// astro.config.mjs - export default /** @type {import('astro').AstroUserConfig} */ { - // tus opciones de configuración van aquí... - // https://docs.astro.build/es/reference/configuration-reference/ -} -``` - -## Referenciando archivos relativos - -Si proporcionas una ruta relativa a `root` o el indicador de CLI `--root`, Astro lo resolverá desde la carpeta de trabajo actual donde ejecutó el comando CLI `astro`. - -```js -// astro.config.mjs -import { defineConfig } from 'astro/config' - -export default defineConfig({ - // Se resuelve a la carpeta "./foo" con relación a la carpeta de trabajo actual - root: 'foo' -}) -``` - -Astro resolverá todos los archivos y carpetas relativos a la carpeta raíz del proyecto especificada en el archivo de configuración. - -```js -// astro.config.mjs -import { defineConfig } from 'astro/config' - -export default defineConfig({ - // Se resuelve a la carpeta "./foo" con relación a la carpeta de trabajo actual - root: 'foo', - // Se resuelve a la carpeta "./foo/public" con relación a la carpeta de trabajo actual - publicDir: 'public', -}) -``` - -Para hacer referencia a un archivo o carpeta relativo al archivo de configuración, use `import.meta.url` (a menos que esté escribiendo un archivo common.js `astro.config.cjs`). - -```js "import.meta.url" -// astro.config.mjs -import { defineConfig } from 'astro/config' - -export default defineConfig({ - // Se resuelve a la carpeta "./foo" con relación a este archivo de configuración - root: new URL("./foo", import.meta.url).toString(), - // Se resuelve a la carpeta "./public" con relación a este archivo de configuración - publicDir: new URL("./public", import.meta.url).toString(), -}) -``` - -:::note -Las propiedades `import.meta` específicas de Vite, como `import.meta.env` o `import.meta.glob`, no son accesibles desde tu archivo de configuración. Recomendamos alternativas como [dotenv](https://github.com/motdotla/dotenv) o [fast-glob](https://github.com/mrmlnc/fast-glob) para estos casos de uso respectivos. Además, las [alias de ruta tsconfig](https://www.typescriptlang.org/tsconfig#paths) no se resolverán. Usa rutas relativas para las importaciones de módulos en este archivo. -::: - -## Personalización de nombres de archivos compilados - -Para el código procesado por Astro, como archivos JavaScript o CSS importados, puedes personalizar los nombres de los archivos compilados usando [`entryFileNames`](https://rollupjs.org/configuration-options/#output-entryfilenames), [`chunkFileNames`](https://rollupjs.org/configuration-options/#output-chunkfilenames) y [`assetFileNames`](https://rollupjs.org/configuration-options/#output-assetfilenames) usando la configuración `vite.build.rollupOptions` en tu archivo `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]', - } - }, - }, - }, -}) -``` - -Esto puede ser útil si tienes scripts con nombres que podrían verse afectados por los bloqueadores de anuncios (por ejemplo, `ads.js` o `google-tag-manager.js`). - -## Variables de entorno - -Astro evalúa los archivos de configuración antes de cargar los demás archivos. Como tal, no puedes usar `import.meta.env` para acceder a las variables de entorno que se establecieron en los archivos `.env`. - -Puedes usar `process.env` en un archivo de configuración para acceder a otras variables de entorno, como las [establecidas por la CLI](/es/guides/environment-variables/#usando-la-cli). - -También puedes usar el [helper de Vite `loadEnv`](https://main.vite.dev/config/#using-environment-variables-in-config) para cargar los archivos `.env` manualmente. - -:::note -`pnpm` no te permite importar módulos que no estén instalados directamente en tu proyecto. Si estás usando `pnpm`, deberás instalar `vite` para usar el 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(), ""); -``` - -## Referencia de configuración - -Lee la [referencia de configuración](/es/reference/configuration-reference/) de Astro para obtener una descripción general y completa de todas las opciones de configuración. diff --git a/src/content/docs/es/guides/content-collections.mdx b/src/content/docs/es/guides/content-collections.mdx deleted file mode 100644 index 9830191aa9cf1..0000000000000 --- a/src/content/docs/es/guides/content-collections.mdx +++ /dev/null @@ -1,645 +0,0 @@ ---- -title: Colecciones de Contenido -description: >- - Las colecciones de contenido ayudan a organizar tu Markdown y a comprobar el tipo - de sus datos de entrada. -i18nReady: true ---- -import { FileTree } from '@astrojs/starlight/components'; -import Since from '~/components/Since.astro' -import RecipeLinks from "~/components/RecipeLinks.astro" -import Badge from "~/components/Badge.astro" - -

- -**Las Colecciones de contenido** son la mejor manera de administrar y crear contenido en cualquier proyecto de Astro. Las colecciones ayudan a organizar tus documentos, validar tu frontmatter y proporcionar una seguridad de tipo automática de TypeScript para todo tu contenido. - - -## ¿Qué son las Colecciones de Contenido? - -Una **colección de contenido** es cualquier directorio de nivel superior dentro del directorio reservado `src/content` del proyecto, como `src/content/newsletter` y `src/content/authors`. Solo se permiten colecciones de contenido dentro del directorio `src/content`. Este directorio no se puede utilizar para nada más. - -Una **entrada de colección** es cualquier pieza de contenido dentro de tu directorio de colecciones de contenido. Las entradas pueden usar formatos de autoría de contenido que incluyen Markdown (`.md`) y MDX (`.mdx` usando la [integración MDX](/es/guides/integrations-guide/mdx/)) o como uno de los dos formatos de datos admitidos: YAML (`.yaml`) y JSON (`.json`). Recomendamos usar un esquema de nomenclatura consistente (minúsculas, guiones en lugar de espacios) para tus archivos para facilitar la búsqueda y organización de tu contenido, pero esto no es obligatorio. También puedes [excluir las entradas de ser construidas](/es/guides/routing/#excluyendo-páginas) prefijando el nombre de archivo con un guión bajo (_). - - -- src/content/ - - **newsletter/** la colección "newsletter" - - week-1.md una entrada de contenido - - week-2.md una entrada de contenido - - week-3.md una entrada de contenido - - -Una vez que tengas una colección, puedes comenzar a [consultar tu contenido](#consultando-colecciones) utilizando las APIs de contenido integradas de Astro. - -### El directorio ".astro" - -Astro guarda metadatos importantes para las colecciones de contenido en un directorio `.astro` en tu proyecto. No es necesario que realices ninguna acción para mantener o actualizar este directorio. Se te recomienda que lo ignores por completo mientras trabajas en tu proyecto. - -El directorio `.astro` se actualizará automáticamente cada vez que ejecutes los comandos [`astro dev`](/es/reference/cli-reference/#astro-dev), [`astro build`](/es/reference/cli-reference/#astro-build). Puedes ejecutar [`astro sync`](/es/reference/cli-reference/#astro-sync) en cualquier momento para actualizar el directorio `.astro` manualmente. - -:::tip -Si estás utilizando Git para el control de versiones, te recomendamos que ignores el directorio `.astro` añadiendo `.astro` a tu `.gitignore`. Esto le dice a Git que ignore este directorio y cualquier archivo dentro de él. - -```bash -echo "\n.astro" >> .gitignore -``` -::: - - - -### Organizando con múltiples colecciones - -Si dos archivos representan diferentes tipos de contenido (por ejemplo, una publicación de blog y un perfil de autor), probablemente pertenezcan a diferentes colecciones. Esto es importante porque muchas características (validación de frontmatter, seguridad de tipo automático de TypeScript) requieren que todas las entradas de una colección compartan una estructura similar. - -Si puedes trabajar con diferentes tipos de contenido, debes crear múltiples colecciones para representar cada tipo. Puedes crear tantas colecciones diferentes en tu proyecto como desees. - - -- src/content/ - - **newsletter/** - - week-1.md - - week-2.md - - **blog/** - - post-1.md - - post-2.md - - **authors/** - - grace-hopper.json - - alan-turing.json - - - -### Organizando con subdirectorios - -Una colección de contenido siempre es una carpeta de nivel superior dentro del directorio `src/content/`. No puedes anidar una colección dentro de otra. Sin embargo, puedes usar subdirectorios para organizar tu contenido dentro de una colección. - -Por ejemplo, puedes usar la siguiente estructura de directorios para organizar las traducciones de i18n dentro de una sola colección `docs`. Cuando consultes esta colección, podrás filtrar el resultado por idioma utilizando la ruta del archivo. - - -- src/content/ - - docs/ esta colleción usa subdirectorios para organizar por idioma - - **en/** - - **es/** - - **de/** - - -## Definiendo Colecciones - -:::note -El archivo `src/content/config.ts` es opcional. Sin embargo, si eliges no definir tus colecciones, deshabilitarás algunas de sus mejores características como la validación del esquema del frontmatter o la generación automática de tipos de datos en TypeScript. -::: - -Para aprovechar al máximo tus colecciones de contenido, crea un archivo `src/content/config.ts` en tu proyecto (también se admiten las extensiones `.js` y `.mjs`). Este es un archivo especial que Astro cargará y utilizará automáticamente para configurar tus colecciones de contenido. - - -```ts -// src/content/config.ts -// 1. Importa las utilidades de `astro:content` -import { defineCollection } from 'astro:content'; -// 2. Define tu colección(es) -const blogCollection = defineCollection({ /* ... */ }); -// 3. Exporta un único objeto `collections` para registrar tu(s) colección(es) -// Esta clave debe coincidir con el nombre de tu directorio de colección en "src/content" -export const collections = { - 'blog': blogCollection, -}; -``` - - -### Configurando TypeScript - -Si **no** extiendes las configuraciones recomendadas de TypeScript `strict` o `strictest` de Astro en tu archivo `tsconfig.json`, es posible que debas actualizar tu `tsconfig.json` para habilitar `strictNullChecks`. - -```json title="tsconfig.json" ins={5} -{ - // Nota: No se necesita ningún cambio si usas "astro/tsconfigs/strict" o "astro/tsconfigs/strictest" - "extends": "astro/tsconfigs/base", - "compilerOptions": { - "strictNullChecks": true - } -} -``` - -Si usas archivos `.js` o `.mjs` en un proyecto de Astro, puedes habilitar IntelliSense y la comprobación de tipos en tu editor habilitando `allowJs` en tu `tsconfig.json`: -```json title="tsconfig.json" ins={6} -{ - // Nota: No se necesita ningún cambio si usas "astro/tsconfigs/strict" o "astro/tsconfigs/strictest" - "extends": "astro/tsconfigs/base", - "compilerOptions": { - "strictNullChecks": true, - "allowJs": true - } -} -``` - -### Definiendo un esquema de colección - -Los esquemas garantizan un frontmatter o datos de entrada consistentes dentro de una colección. Un esquema **garantiza** que estos datos existen en una forma predecible cuando necesitas hacer referencia o consultarlos. Si algún archivo viola su esquema de colección, Astro proporcionará un error útil para informarte. - -Los esquemas también potencian las generación automática de tipos de TypeScript para tu contenido en Astro. Cuando defines un esquema para tu colección, Astro generará y aplicará automáticamente una interfaz de TypeScript. El resultado es un soporte completo de TypeScript cuando consultas tu colección, incluyendo el autocompletado de propiedades y la comprobación de tipos. - -Para definir tu primera colección, crea un archivo `src/content/config.ts` si no existe (las extensiones `.js` y `.mjs` también son compatibles). Este archivo debe: - -1. **Importar las utilidades adecuadas** de `astro:content`. -2. **Definir cada colección que deseas validar.** Esto incluye un `type` (introducido en Astro v2.5.0) que especifica si la colección contiene formatos de autoría de contenido como Markdown (`type: 'content'`) o formatos de datos como JSON o YAML (`type: 'data'`). También incluye un `schema` que define la forma de tu frontmatter o datos de entrada. -3. **Exportar un único objeto `collections`** para registrar tus colecciones. - -```ts -// src/content/config.ts -// 1. Importar las utilidades de `astro:content` -import { z, defineCollection } from 'astro:content'; - -// 2. Definir un `type` y `schema` para cada colección -const blogCollection = defineCollection({ - type: 'content', // v2.5.0 y posteriores - schema: z.object({ - title: z.string(), - tags: z.array(z.string()), - image: z.string().optional(), - }), -}); - -// 3. Exportar un único objeto `collections` para registrar tu(s) colección(es) -export const collections = { - 'blog': blogCollection, -}; -``` - -### Definiendo múltiples colecciones - -Puedes usar `defineCollection()` tantas veces como desees para crear múltiples esquemas. Todas las colecciones deben ser exportadas desde dentro del único objeto `collections`. - -```ts -// src/content/config.ts -const blogCollection = defineCollection({ - type: 'content', - schema: z.object({ /* ... */ }) -}); -const newsletter = defineCollection({ - type: 'content', - schema: z.object({ /* ... */ }) -}); -const authors = defineCollection({ - type: 'data', - schema: z.object({ /* ... */ }) -}); - -export const collections = { - 'blog': blogCollection, - 'newsletter': newsletter, - 'authors': authors, -}; -``` - -A medida que tu proyecto crece, también eres libre de reorganizar tu base de código y mover la lógica fuera del archivo `src/content/config.ts`. Definir tus esquemas por separado puede ser útil para reutilizar esquemas en múltiples colecciones y compartir esquemas con otras partes de tu proyecto. - -```ts -// src/content/config.ts -// 1. Importar tus utilidades y esquemas -import { defineCollection } from 'astro:content'; -import { blogSchema, authorSchema } from '../schemas'; - -// 2. Definir tus colecciones -const blogCollection = defineCollection({ - type: 'content', - schema: blogSchema, -}); -const authorCollection = defineCollection({ - type: 'data', - schema: authorSchema, -}); - -// 3. Exportar múltiples colecciones para registrarlas -export const collections = { - 'blog': blogCollection, - 'authors': authorCollection, -}; -``` - -### Usando esquemas de colección de terceros - -Puedes importar esquemas de colección desde cualquier lugar, incluyendo paquetes npm externos. Esto puede ser útil cuando trabajas con temas y bibliotecas que proporcionan sus propios esquemas de colección para que los uses. - - -```ts -// src/content/config.ts -import { blogSchema } from 'my-blog-theme'; -const blogCollection = defineCollection({ type: 'content', schema: blogSchema }); - -// Exportar la colección de blog, usando un esquema externo de 'my-blog-theme' -export const collections = { - 'blog': blogCollection, -}; -``` - - -### Definiendo tipos de datos con Zod - -Astro usa [Zod](https://github.com/colinhacks/zod) para potenciar sus esquemas de contenido. Con Zod, Astro puede validar el frontmatter de cada archivo dentro de una colección *y* proporcionar tipos automáticos de TypeScript cuando consultas el contenido desde dentro de tu proyecto. - -Para usar Zod en Astro, importa la utilidad `z` de `"astro:content"`. Esta es una re-exportación de la biblioteca Zod, y admite todas las funciones de Zod. Consulta el [README de Zod](https://github.com/colinhacks/zod) para obtener documentación completa sobre cómo funciona Zod y qué funciones están disponibles. - - -```ts -// Ejemplo: Una hoja de trucos de muchos tipos de datos Zod comunes -import { z, defineCollection } from 'astro:content'; - -defineCollection({ - schema: z.object({ - isDraft: z.boolean(), - title: z.string(), - sortOrder: z.number(), - image: z.object({ - src: z.string(), - alt: z.string(), - }), - author: z.string().default('Anonymous'), - language: z.enum(['en', 'es']), - tags: z.array(z.string()), - // Una propiedad opcional del frontmatter. ¡Muy común! - footnote: z.string().optional(), - // En el frontmatter, las fechas escritas sin comillas se interpretan como objetos Date - publishDate: z.date(), - // También puedes transformar un string de fecha (por ejemplo, "2022-07-08") a un objeto Date - // publishDate: z.string().transform((str) => new Date(str)), - // Avanzado: Valida que el string también sea un correo electrónico - authorContact: z.string().email(), - // Avanzado: Valida que el string también sea una URL - canonicalURL: z.string().url(), - }) -}) -``` - -### Definiendo referencias de colección - -Las entradas de una colección pueden "referenciar" otras entradas relacionadas. - -Con la función `reference()` de la API de Colecciones, puedes definir una propiedad en un esquema de colección como una entrada de otra colección. Por ejemplo, puedes requerir que cada entrada `space-shuttle` incluya una propiedad `pilot` que utilice el propio esquema de la colección `pilot` para la comprobación de tipos, el autocompletado y la validación. - -Un ejemplo común es una publicación de blog que hace referencia a perfiles de autor reutilizables almacenados como JSON, o a URL de publicaciones relacionadas almacenadas en la misma colección: - -```ts -import { defineCollection, reference, z } from 'astro:content'; - -const blog = defineCollection({ - type: 'content', - schema: z.object({ - title: z.string(), - // Referencia a un único autor de la colección `authors` por `id` - author: reference('authors'), - // Referencia a un arreglo de publicaciones relacionadas de la colección `blog` por `slug` - relatedPosts: z.array(reference('blog')), - }) -}); - -const authors = defineCollection({ - type: 'data', - schema: z.object({ - name: z.string(), - portfolio: z.string().url(), - }) -}); - -export const collections = { blog, authors }; -``` - -Este ejemplo de publicación de blog especifica los `slug` de las publicaciones relacionadas y el `id` del autor de la publicación: - -```yaml title="src/content/blog/welcome.md" ---- -title: "Bienvenido a mi Blog" -author: ben-holmes # referencia `src/content/authors/ben-holmes.json` -relatedPosts: -- about-me # referencia `src/content/blog/about-me.md` -- my-year-in-review # referencia `src/content/blog/my-year-in-review.md` ---- -``` - -### Definiendo slugs personalizados - -Cuando usas `type: 'content'`, cada entrada de contenido genera una propiedad `slug` compatible con URL a partir de su [`id` de archivo](/es/reference/api-reference/#id). El slug se utiliza para consultar la entrada directamente desde tu colección. También es útil cuando creas nuevas páginas y URL a partir de tu contenido. - -Puedes anular el slug generado de una entrada añadiendo tu propia propiedad `slug` al frontmatter del archivo. Esto es similar a la función "permalink" de otros frameworks web. `"slug"` es un nombre de propiedad especial y reservado que no está permitido en tu `schema` de colección personalizado y no aparecerá en la propiedad `data` de tu entrada. - -```md {3} ---- -title: Mi Publicación de Blog -slug: my-custom-slug/supports/slashes ---- -El contenido de tu publicación de blog aquí. -``` - -## Consultando Colecciones - -Astro proporciona dos funciones para consultar una colección y devolver una (o más) entradas de contenido: [`getCollection()`](/es/reference/api-reference/#getcollection) y [`getEntry()`](/es/reference/api-reference/#getentry). - -```js -import { getCollection, getEntry } from 'astro:content'; - -// Obtén todas las entradas de una colección. -// Requiere el nombre de la colección como argumento. -// Ejemplo: recupera `src/content/blog/**` -const allBlogPosts = await getCollection('blog'); - -// Obtén una única entrada de colleción. -// Requiere el nombre de la colección y también -// el `slug` de la entrada (colecciones de contenido) o `id` (colecciones de datos) -// Ejemplo: recupera `src/content/authors/grace-hopper.json` -const graceHopperProfile = await getEntry('authors', 'grace-hopper'); -``` - -Ambas funciones devuelven entradas de contenido tal como se definen en el tipo [`CollectionEntry`](/es/reference/api-reference/#tipo-de-entrada-de-la-colección). - -### Accediendo a los datos referenciados - -Cualquier [referencia definida en tu esquema](#definiendo-referencias-de-colección) debe consultarse por separado después de consultar por primera vez la entrada de tu colección. Puedes usar la función `getEntry()` de nuevo, o `getEntries()`, para recuperar la entrada referenciada del objeto `data` devuelto. - -```astro title="src/pages/blog/welcome.astro" ---- -import { getEntry, getEntries } from 'astro:content'; - -const blogPost = await getEntry('blog', 'welcome'); - -// Resuelve una referencia singular -const author = await getEntry(blogPost.data.author); -// Resuelve un arreglo de referencias -const relatedPosts = await getEntries(blogPost.data.relatedPosts); ---- - -

{blogPost.data.title}

-

Autor: {author.data.name}

- - - -

También te puede gustar:

-{relatedPosts.map(p => ( -
{p.data.title} -))} -``` - -### Filtrando consultas de colección - -`getCollection()` toma un callback opcional "filter" que te permite filtrar tu consulta en función de las propiedades `id` o `data` (frontmatter) de una entrada. Para las colecciones de `type: 'content'`, también puedes filtrar en función de `slug`. - -:::note -La propiedad `slug` es específica de las colecciones de contenido y no estará disponible al filtrar colecciones de JSON o YAML. -::: - -Puedes usar esto para filtrar por cualquier criterio de contenido que desees. Por ejemplo, puedes filtrar por propiedades como `draft` para evitar que se publiquen publicaciones de blog en borrador en tu blog: - -```js -// Ejemplo: Filtra las entradas de contenido con `draft: true` -import { getCollection } from 'astro:content'; -const publishedBlogEntries = await getCollection('blog', ({ data }) => { - return data.draft !== true; -}); -``` - -También puedes crear páginas en borrador que estarán disponibles cuando ejecutes el servidor de desarrollo, pero que no se construirán en producción: - -```js -// Ejemplo: Filtrar las entradas de contenido con `draft: true` solo al construir para producción -import { getCollection } from 'astro:content'; -const blogEntries = await getCollection('blog', ({ data }) => { - return import.meta.env.PROD ? data.draft !== true : true; -}); -``` - -Para filtrar argumentos también admite el filtrado por directorios anidados dentro de una colección. Dado que el `id` incluye la ruta anidada completa, puedes filtrar por el inicio de cada `id` para devolver solo los elementos de un directorio anidado específico: - -```js -// Ejemplo: Filtra las entradas por subdirectorio en la colección -import { getCollection } from 'astro:content'; -const englishDocsEntries = await getCollection('docs', ({ id }) => { - return id.startsWith('en/'); -}); -``` - -### Usando contenido en plantillas de Astro - -Una vez que hayas consultado tus entradas de colección, puedes acceder a cada entrada directamente dentro de la plantilla de tu componente de Astro. Esto te permite renderizar HTML para cosas como enlaces a tu contenido (usando el `slug` de contenido) o información sobre tu contenido (usando la propiedad `data`). - -Para obtener información sobre cómo renderizar tu contenido a HTML, consulta [Renderizando contenido a HTML](#renderizando-contenido-a-html) a continuación. - -```astro ---- -// src/pages/index.astro -import { getCollection } from 'astro:content'; -const blogEntries = await getCollection('blog'); ---- -
    - {blogEntries.map(blogPostEntry => ( -
  • - {blogPostEntry.data.title} - -
  • - ))} -
-``` - -### Pasando contenido como props - -Un componente también puede pasar un contenido completo como una prop. - -Si haces esto, puedes usar la utilidad [`CollectionEntry`](/es/reference/api-reference/#tipo-de-entrada-de-la-colección) para tipar correctamente las props de tu componente usando TypeScript. Esta utilidad toma un argumento de tipo string que coincide con el nombre del esquema de tu colección y heredará todas las propiedades de ese esquema de colección. - -```astro /CollectionEntry(?:<.+>)?/ ---- -// src/components/BlogCard.astro -import type { CollectionEntry } from 'astro:content'; -interface Props { - post: CollectionEntry<'blog'>; -} - -// `post` coincidirá con el tipo de esquema de tu colección 'blog' -const { post } = Astro.props; ---- -``` - -### Renderizando contenido a HTML - -Una vez consultado, puedes renderizar las entradas de Markdown y MDX a HTML usando la propiedad de función `render()` de la entrada. Llamar a esta función te da acceso al contenido y metadatos renderizados, incluyendo tanto un componente `` como una lista de todos los encabezados renderizados. - -```astro {5} ---- -// src/pages/render-example.astro -import { getEntry } from 'astro:content'; -const entry = await getEntry('blog', 'post-1'); -const { Content, headings } = await entry.render(); ---- -

Publicado el: {entry.data.published.toDateString()}

- -``` - - -## Generando Rutas desde el Contenido - -Las Colecciones de contenido se almacenan fuera del directorio `src/pages/`. Esto significa que no se generan rutas para los elementos de tu colección de forma predeterminada. Deberás crear manualmente una nueva [ruta dinámica](/es/guides/routing/#rutas-dinámicas) para generar páginas HTML a partir de las entradas de tu colección. Tu ruta dinámica asignará el parámetro de solicitud entrante (por ejemplo, `Astro.params.slug` en `src/pages/blog/[...slug].astro`) para recuperar la entrada correcta dentro de una colección. - -El método exacto para generar rutas dependerá del modo de salida de tu compilación [`output`](/es/reference/configuration-reference/#output): 'static' (el valor predeterminado) o 'server' (para SSR). - -### Construyendo para salida estática (predeterminado) - -Si estás construyendo un sitio web estático (el comportamiento predeterminado de Astro), debes usar la función [`getStaticPaths()`](/es/reference/api-reference/#getstaticpaths) para crear múltiples páginas a partir de un solo componente `src/pages/` durante tu compilación. - -Llama `getCollection()` dentro de `getStaticPaths()` para [consultar tu contenido o tu colección de datos](/es/guides/content-collections/#consultando-colecciones). Luego, crea tus nuevas rutas URL usando la propiedad `slug` (colecciones de contenido) o la propiedad `id`(colecciones de datos) para cada entrada de contenido. - -```astro "{ slug: entry.slug }" ---- -// src/pages/posts/[...slug].astro -import { getCollection } from 'astro:content'; -// 1. Genera una nueva ruta para cada entrada de colección -export async function getStaticPaths() { - const blogEntries = await getCollection('blog'); - return blogEntries.map(entry => ({ - params: { slug: entry.slug }, props: { entry }, - })); -} -// 2. Para tu plantilla, puedes obtener la entrada directamente de la prop -const { entry } = Astro.props; -const { Content } = await entry.render(); ---- -

{entry.data.title}

- -``` - -Esto generará una nueva página para cada entrada en la colección `blog`. Por ejemplo, una entrada en `src/content/blog/hello-world.md` tendrá un slug de `hello-world`, y por lo tanto su URL final será `/posts/hello-world/`. - -:::note -Si tus slugs personalizados contienen el carácter `/` para producir URLs con múltiples segmentos de ruta, debes usar un [parámetro rest (`[...slug]`)](/es/guides/routing/#parámetros-rest) en el nombre de archivo `.astro` para esta página de enrutamiento dinámico. -::: - -### Construyendo para salida del servidor (SSR) - -Si estás construyendo un sitio web dinámico (usando el soporte SSR de Astro), no se espera que generes ninguna ruta de antemano durante la compilación. En su lugar, tu página debe examinar la solicitud (usando `Astro.request` o `Astro.params`) para encontrar el `slug` bajo demanda, y luego recuperarlo usando [`getEntry()`](/es/reference/api-reference/#getentry). - - -```astro ---- -// src/pages/posts/[...slug].astro -import { getEntry } from "astro:content"; -// 1. Obtén el slug de la solicitud entrante del servidor -const { slug } = Astro.params; -if (slug === undefined) { - throw new Error("Slug es requerido"); -} -// 2. Consulta la entrada directamente usando el slug de la solicitud -const entry = await getEntry("blog", slug); -// 3. Redirige si la entrada no existe -if (entry === undefined) { - return Astro.redirect("/404"); -} -// 4. (Opcional) Renderiza la entrada a HTML en la plantilla -const { Content } = await entry.render(); ---- -``` - -:::tip -¡Explora la carpeta `src/pages/` del [código de demostración del tutorial de blog en GitHub](https://github.com/withastro/blog-tutorial-demo/tree/content-collections/src/pages) o [abrelo en StackBlitz](https://stackblitz.com/github/withastro/blog-tutorial-demo/tree/content-collections?file=src/pages/blog.astro) para ver ejemplos completos de cómo crear páginas a partir de tus colecciones para funciones de blog como una lista de publicaciones de blog, páginas de etiquetas y más! -::: - -## Migrando desde el Enrutamiento Basado en Archivos - -Si tienes un proyecto de Astro existente como un blog, que usa archivos Markdown o MDX en subcarpetas dentro de `src/pages/`, considera migrar los archivos de contenido o datos relacionados a las colecciones de contenido. - -Consulta cómo convertir un ejemplo básico de blog de `src/pages/posts/` a `src/content/posts` en nuestro [tutorial paso a paso](/es/tutorial/6-islands/4/) que utiliza la base de código del [proyecto terminado del tutorial Crear un Blog](https://github.com/withastro/blog-tutorial-demo). - -## Habilitando la Generación de Esquemas JSON - -

- -Si estás trabajando con colecciones de tipo `data`, Astro generará automáticamente archivos de esquema JSON para que tu editor obtenga IntelliSense y comprobación de tipos. Se creará un archivo separado para cada colección de datos en tu proyecto basado en las colecciones definidas en `src/content/config.ts` utilizando una biblioteca llamada [`zod-to-json-schema`](https://github.com/StefanTerdell/zod-to-json-schema#known-issues). - -Esta carácateristica requiere que establezcas manualmente la ruta del archivo de tu esquema como el valor de `$schema` en cada archivo de entrada de datos de la colección: - -```json title="src/content/authors/armand.json" ins={2} -{ - "$schema": "../../../.astro/collections/authors.schema.json", - "name": "Armand", - "skills": ["Astro", "Starlight"] -} -``` - -Alternativamente, puedes establecer este valor en la configuración de tu editor. Por ejemplo, para establecer este valor en la [configuración `json.schemas` de VSCode](https://code.visualstudio.com/docs/languages/json#_json-schemas-and-settings), proporciona la ruta de los archivos a coincidir y la ubicación de tu esquema JSON: - -```json -{ - "json.schemas": [ - { - "fileMatch": [ - "/src/content/authors/**" - ], - "url": "./.astro/collections/authors.schema.json" - } - ] -} -``` - -## Habilitando el Caché de Construcción - -

- -Si estás trabajando con colecciones grandes, es posible que desees habilitar las compilaciones en caché con la bandera [`experimental.contentCollectionCache`](/es/reference/configuration-reference/#experimentalcontentcollectioncache). Esta característica experimental optimiza el proceso de compilación de Astro, permitiendo que las colecciones no modificadas se almacenen y reutilicen entre compilaciones. - -En muchos casos, esto puede conducir a mejoras significativas en el rendimiento de la compilación. - -Mientras esta característica se estabiliza, es posible que te encuentres con problemas con la caché almacenada. Siempre puedes restablecer tu caché de compilación ejecutando el siguiente comando: - -``` -npm run astro build -- --force -``` - - -## Modificando el Frontmatter con Remark - -:::caution -**No es recomendado.** Los plugins de remark y rehype acceden al frontmatter _raw_ del documento Markdown o MDX. Esto significa que el frontmatter `remarkPluginFrontmatter` se maneja por separado de tu `schema` de tipo seguro, y no reflejará ningún cambio o valor predeterminado aplicado a través de Astro. ¡Úsalo bajo tu propio riesgo! -::: - -Astro admite los plugins remark o rehype que [modifican tu frontmatter directamente](/es/guides/markdown-content/#modificación-programática-del-frontmatter). Puedes acceder a este frontmatter modificado dentro de una entrada de contenido usando la propiedad `remarkPluginFrontmatter` devuelta de `render()`: - -```astro "{ remarkPluginFrontmatter }" ---- -import { getEntry } from 'astro:content'; -const blogPost = await getEntry('blog', 'post-1'); -const { remarkPluginFrontmatter } = await blogPost.render(); ---- -

{blogPost.data.title} — {remarkPluginFrontmatter.readingTime}

-``` - - - -Los pipelines de remark y rehype solo se ejecutan cuando se renderiza tu contenido, lo que explica por qué `remarkPluginFrontmatter` solo está disponible después de llamar a `render()` en tu entrada de contenido. En contraste, `getCollection()` y `getEntry()` no pueden devolver estos valores directamente porque no renderizan tu contenido. - -## Trabajando con fechas en el frontmatter - -Muchos formatos de fecha son admitidos en las colecciones de contenido, pero el esquema de tu colección debe coincidir con el formato utilizado en el frontmatter YAML de tu Markdown o MDX. - -YAML usa el estándar [ISO-8601](https://www.iso.org/iso-8601-date-and-time-format.html) para expresar fechas. Utiliza el formato `yyyy-mm-dd` (por ejemplo, `2021-07-28`) junto con un tipo de esquema de `z.date()`: - -```markdown title="src/pages/posts/example-post.md" ---- -title: Mi Publicación de Blog -pubDate: 2021-07-08 ---- -``` - -El formato de fecha se especificará en UTC si no se proporciona una zona horaria. Si necesitas especificar una zona horaria, puedes usar el formato [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601). - -```markdown title="src/pages/posts/example-post.md" ---- -title: Mi Publicación de Blog -pubDate: 2021-07-08T12:00:00-04:00 ---- -``` - -Para renderizar solo `YYYY-MM-DD` de la marca de tiempo UTC completa, utiliza el método `slice` de JavaScript para eliminar la marca de tiempo: - -```astro title="src/layouts/ExampleLayout.astro" ---- -const { frontmatter } = Astro.props; ---- -

{frontmatter.title}

-

{frontmatter.pubDate.toISOString().slice(0,10)}

-``` -Para ver un ejemplo usando `toLocaleDateString` para formatear el día, mes y año, consulta el componente [``](https://github.com/withastro/astro/blob/latest/examples/blog/src/components/FormattedDate.astro) en la plantilla oficial del blog de Astro. diff --git a/src/content/docs/es/guides/data-fetching.mdx b/src/content/docs/es/guides/data-fetching.mdx deleted file mode 100644 index 7fded92d5a3b7..0000000000000 --- a/src/content/docs/es/guides/data-fetching.mdx +++ /dev/null @@ -1,111 +0,0 @@ ---- -title: Fetching de datos -description: Aprenda como obtener datos remotos con Astro utilizando la API de fetch. -i18nReady: true ---- - -Los archivos `.astro` pueden obtener datos remotos para ayudarte a generar tus páginas. - -## `fetch()` en Astro - -Todos los [componentes de Astro](/es/basics/astro-components/) tienen acceso a la [función global `fetch()`](https://developer.mozilla.org/es/docs/Web/API/fetch) en su script de componente para hacer peticiones HTTP a APIs usando la URL completa (p.ej. https://example.com/api). -Adicionalmente, puedes construir una URL a las páginas y endpoints de tu proyecto que se renderizan bajo demanda en el servidor utilizando `new URL("/api", Astro.url)`. - -Esta llamada a fetch será ejecutada en el momento de la compilación, y los datos estarán disponibles para la plantilla del componente para generar HTML dinámico. Si el modo [SSR](/es/guides/on-demand-rendering/) está habilitado, cualquier llamada a fetch será ejecutada en tiempo de ejecución. - -💡 Aprovecha el [**top-level await**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await#top_level_await) dentro del script del componente de Astro. - -💡 Puedes pasar los datos obtenidos a los componentes de Astro u otros UI frameworks como props. - -```astro /await fetch\\(.*?\\)/ ---- -// src/components/User.astro -import Contact from '../components/Contact.jsx'; -import Location from '../components/Location.astro'; - -const response = await fetch('https://randomuser.me/api/'); -const data = await response.json(); -const randomUser = data.results[0] ---- - -

Usuario

-

{randomUser.name.first} {randomUser.name.last}

- - - - -``` - -:::note -Recuerda, todos los datos en los componentes de Astro se obtienen cuando se renderiza el componente. - -Cuando tu proyecto de Astro es desplegado obtendrá los datos **una vez, en el momento de la compilación**. En desarrollo, verás el fetching de datos al actualizar los componentes. Si necesitas hacer fetching datos varias veces del lado del cliente, usa un [componente de framework](/es/guides/framework-components/) o un [script del lado del cliente](/es/guides/client-side-scripts/) en el componente de Astro. -::: - - -## `fetch()` en componentes de framework - -La función `fetch()` también está disponible globalmente para cualquier [componente de framework](/es/guides/framework-components/): - -```tsx title="src/components/Movies.tsx" /await fetch\\(.*?\\)/ -import type { FunctionalComponent } from 'preact'; - -const data = await fetch('https://example.com/movies.json').then((response) => - response.json() -); - -// Los componentes que se procesan en la compilación se registran en la CLI. -// Cuando se renderizan con una directiva client:*, se registran en la consola del navegador. -console.log(data); - -const Movies: FunctionalComponent = () => { -// Envía el resultado a la página. - return
{JSON.stringify(data)}
; -}; - -export default Movies; -``` - - -### Consultas en GraphQL - -Astro también puede usar `fetch()` para consultar a un servidor GraphQL con cualquier query de GraphQL válida. - -```astro title="src/components/Film.astro" "await fetch" ---- -const response = await fetch("https://swapi-graphql.netlify.app/.netlify/functions/index", - { - method: 'POST', - headers: {'Content-Type':'application/json'}, - body: JSON.stringify({ - query: ` - query getFilm ($id:ID!) { - film(id: $id) { - title - releaseDate - } - } - `, - variables: { - id: "ZmlsbXM6MQ==", - }, - }), - }); - -const json = await response.json(); -const { film } = json.data; ---- -

Obteniendo información sobre Star Wars: A New Hope

-

Título: {film.title}

-

Año: {film.releaseDate}

-``` - -## Fetching de datos desde un Headless CMS - -Los componentes de Astro pueden obtener datos desde tu CMS favorito y luego renderizarlos como contenido en tu página. Usando [rutas dinámicas](/es/guides/routing/#rutas-dinámicas), los componentes pueden generar páginas basadas en el contenido obtenido del CMS. - -Ve nuestras [guías de CMS](/es/guides/cms/) para obtener más detalles sobre cómo integrar Astro con un headless CMS incluyendo Stroyblok, Contentful y WordPress. - -## Recursos de la comunidad - -- [Creando una app fullstack con Astro + GraphQL](https://robkendal.co.uk/blog/how-to-build-astro-site-with-graphql/) diff --git a/src/content/docs/es/guides/deploy/aws.mdx b/src/content/docs/es/guides/deploy/aws.mdx deleted file mode 100644 index f43de68eddb06..0000000000000 --- a/src/content/docs/es/guides/deploy/aws.mdx +++ /dev/null @@ -1,230 +0,0 @@ ---- -title: Despliega tu proyecto de Astro en AWS -description: Cómo desplegar tu proyecto de Astro en AWS. -type: deploy -i18nReady: true ---- -import { Steps } from '@astrojs/starlight/components'; -import PackageManagerTabs from '~/components/tabs/PackageManagerTabs.astro'; - -[AWS](https://aws.amazon.com/) es una plataforma integral de alojamiento, que puede ser usada para desplegar un proyecto de Astro. - -Desplegar tu proyecto en AWS requiere el uso de la [consola de AWS](https://aws.amazon.com/console/). (La mayoría de estas acciones también se pueden realizar mediante el [CLI de AWS](https://aws.amazon.com/cli/)). Esta guía te indicará los pasos a seguir para desplegar tu proyecto en AWS, usando [AWS Amplify](https://aws.amazon.com/amplify/), [S3 alojamiento de sitios web estáticos](https://aws.amazon.com/s3/) y [CloudFront](https://aws.amazon.com/cloudfront/). - -## AWS Amplify - -AWS Amplify es un conjunto de herramientas que permiten a los desarrolladores web y mobile crear aplicaciones completas en AWS de manera rápida y fácil. - - -1. Crea un nuevo proyecto en Amplify. -2. Conecta tu repositorio a Amplify. -3. Modifica los ajustes de compilación para adaptarlos al proceso de compilación de tu proyecto. - - - - ```yaml - version: 1 - frontend: - phases: - preBuild: - commands: - - npm i -g pnpm - - pnpm config set store-dir .pnpm-store - - pnpm i - build: - commands: - - pnpm run build - artifacts: - baseDirectory: /dist - files: - - '**/*' - cache: - paths: - - .pnpm-store/**/* - ``` - - - ```yaml - version: 1 - frontend: - phases: - preBuild: - commands: - - npm ci - build: - commands: - - npm run build - artifacts: - baseDirectory: /dist - files: - - '**/*' - cache: - paths: - - node_modules/**/* - - ``` - - - ```yaml - version: 1 - frontend: - phases: - preBuild: - commands: - - yarn install - build: - commands: - - yarn build - artifacts: - baseDirectory: /dist - files: - - '**/*' - cache: - paths: - - node_modules/**/* - ``` - - - - -Amplify desplegará automáticamente tu proyecto y lo actualizará al subir los cambios a tu repositorio. - -## Alojando contenido estático en S3 - -S3 es el punto de partida de cualquier aplicación. Es donde se almacenan los archivos de tu proyecto. S3 cobra por el almacenamiento de archivos y la cantidad de solicitudes a estos archivos. Puedes encontrar más información sobre S3 en la [documentación de AWS](https://aws.amazon.com/s3/). - - -1. Crea un bucket en S3 con el nombre de tu proyecto. - - :::tip - El nombre del bucket debe ser único globalmente. Recomendamos una combinación del nombre del proyecto y el dominio de tu proyecto. - ::: - -2. Desactiva **"Block all public access"**. De forma predeterminada, AWS establece a todos los buckets como privados. Para hacerlo público, debes desmarcar la casilla de verificación "Block public access" en las propiedades del bucket. - -3. Carga los archivos construidos ubicados en `dist` a S3. Puedes hacerlo manualmente desde la consola o usar la CLI de AWS. Si usas la CLI utiliza el siguiente comando después de [autenticarte en AWS](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html): - - ``` - aws s3 cp dist/ s3:/// --recursive - ``` - -4. Actualiza la política del bucket para permitir acceso público. Puedes encontrar esta configuración en **Permissions > Bucket policy** del bucket. - - ```json - { - "Version": "2012-10-17", - "Statement": [ - { - "Sid": "PublicReadGetObject", - "Effect": "Allow", - "Principal": "*", - "Action": "s3:GetObject", - "Resource": "arn:aws:s3:::/*" - } - ] - } - ``` - - :::caution - No olvides reemplazar `` con el nombre de tu bucket. - ::: - -5. Habilita el alojamiento de sitios web para tu bucket. Puedes encontrar esta configuración en **Properties > Static website hosting** del bucket. Establece el documento index a `index.html` y el documento error a `404.html`. Finalmente, puedes encontrar la URL de tu nuevo sitio web en **Properties > Static website hosting** del bucket. - - :::note - Si estás desplegando una aplicación de una sola página (SPA), establece el documento de error a `index.html`. - ::: - - -## S3 y CloudFront - -CloudFront es un servicio web que proporciona capacidades de red de entrega de contenido (CDN). Se utiliza para almacenar en caché el contenido de un servidor web y distribuirlo a los usuarios finales. CloudFront cobra por la cantidad de datos transferidos. Agregar CloudFront a tu bucket S3 es más rentable y proporciona una entrega más rápida. - -Para conectar S3 con CloudFront, crea una distribución de CloudFront con los siguientes valores: - - **Origin domain:** El endpint del sitio web estático de tu bucket de S3. Puedes encontrar tu endpint en **Properties > Static website hosting** de tu bucket de S3. Alternativamente, puedes seleccionar tu bucket de S3 y hacer clic en la llamada para reemplazar la dirección de tu bucket con el endpint estático de tu bucket. - - **Viewer protocol policy:** "Redirect to HTTPS" - -Esta configuración servirá tu sitio utilizando la red de CDN de CloudFront. Puedes encontrar la URL de distribución de CloudFront en la sección **Distributions > Domain name** del bucket. - -:::note -Cuando conectas CloudFront a un endpoint de sitio web estático de S3, dependes de las políticas del bucket de S3 para el control de acceso. Consulta la sección de [Alojando contenido estático en S3](/es/guides/deploy/aws/#alojando-contenido-estático-en-s3) para obtener más información sobre las políticas del bucket. -::: - -## Despliegue continuo con GitHub Actions - -Hay muchas formas de configurar despliegue continuo en AWS. Una posibilidad si el código está alojado en GitHub es usar [GitHub Actions](https://github.com/features/actions) que desplegará tu proyecto cada vez que hagas un push. - - -1. Crea una nueva política en tu cuenta de AWS utilizando [IAM](https://aws.amazon.com/iam/) con los siguientes permisos. Esta política te permitirá cargar los nuevos archivos en tu bucket de S3 e invalidar los archivos antiguos de la distribución de CloudFront al desplegar. - - ```json - { - "Version": "2012-10-17", - "Statement": [ - { - "Sid": "VisualEditor0", - "Effect": "Allow", - "Action": [ - "s3:PutObject", - "s3:ListBucket", - "s3:DeleteObject", - "cloudfront:CreateInvalidation" - ], - "Resource": [ - "", - "arn:aws:s3:::/*", - "arn:aws:s3:::" - ] - } - ] - } - ``` - - :::caution - No olvides reemplazar `` y ``. Puedes encontrar el DISTRIBUTION_ARN en **CloudFront > Distributions > Details**. - ::: - -2. Crea un nuevo usuario de IAM y adjunta la política al usuario. Esto te proporcionará el `AWS_SECRET_ACCESS_KEY` y el `AWS_ACCESS_KEY_ID`. - -3. Agrega el siguiente workflow a tu repositorio en `.github/workflows/deploy.yml` y envíalo a GitHub. Deberás agregar `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, `BUCKET_ID` y `DISTRIBUTION_ID` como "secrets" a tu repositorio en GitHub en **Settings** > **Secrets** > **Actions**. Haz clic en New repository secret para agregar cada uno. - - ```yaml - name: Deploy Website - - on: - push: - branches: - - main - - jobs: - deploy: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Configure AWS Credentials - uses: aws-actions/configure-aws-credentials@v1 - with: - aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} - aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - aws-region: us-east-1 - - name: Install modules - run: npm ci - - name: Build application - run: npm run build - - name: Deploy to S3 - run: aws s3 sync --delete ./dist/ s3://${{ secrets.BUCKET_ID }} - - name: Create CloudFront invalidation - run: aws cloudfront create-invalidation --distribution-id ${{ secrets.DISTRIBUTION_ID }} --paths "/*" - ``` - - :::note - El `BUCKET_ID` es el nombre del bucket de S3. El `DISTRIBUTION_ID` es el ID de la distribución de CloudFront. Puedes encontrar el ID de la distribución de CloudFront en **CloudFront > Distributions > ID** - ::: - - -## Recursos de la comunidad - -- [Despliega Astro a AWS Amplify](https://www.launchfa.st/blog/deploy-astro-aws-amplify) -- [Despliega Astro a AWS Elastic Beanstalk](https://www.launchfa.st/blog/deploy-astro-aws-elastic-beanstalk) -- [Despliega Astro a Amazon ECS en AWS Fargate](https://www.launchfa.st/blog/deploy-astro-aws-fargate) diff --git a/src/content/docs/es/guides/deploy/buddy.mdx b/src/content/docs/es/guides/deploy/buddy.mdx deleted file mode 100644 index 426cf214fb9ed..0000000000000 --- a/src/content/docs/es/guides/deploy/buddy.mdx +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: Despliega tu proyecto de Astro con Buddy -description: Cómo desplegar tu proyecto Astro usando Buddy. -type: deploy -i18nReady: true ---- -import { Steps } from '@astrojs/starlight/components'; - -Puedes desplegar tu proyecto Astro usando [Buddy](https://buddy.works/), una solución de CI/CD que puede construir tu proyecto y enviarlo a muchos destinos de despliegue diferentes, incluidos servidores FTP y proveedores de alojamiento en la nube. - -:::note -Buddy no alojará tu proyecto. Solo te ayudará a administrar el proceso de compilación y entregará el resultado a la plataforma de despliegue de tu elección. -::: - -## Cómo desplegar - - -1. [Crea una cuenta en **Buddy**](https://buddy.works/sign-up). - -2. Crea un nuevo proyecto y conéctalo con un repositorio Git (GitHub, GitLab, BitBucket, cualquier repositorio Git privado o puedes usar Buddy Git Hosting). - -3. Agrega una nueva pipeline. - -4. En la pipeline recién creada, agrega una action para **[Node.js](https://buddy.works/actions/node-js)**. - -5. En esta action agrega: - - ```bash - npm install - npm run build - ``` - -6. Agrega una action de despliegue: hay muchas para elegir, puedes explorarlas en [el catálogo de acciones de Buddy](https://buddy.works/actions). Aunque tus configuraciones pueden diferir, recuerda configurar la **ruta de origen** en `dist`. - -7. Presiona el botón **Run**. - diff --git a/src/content/docs/es/guides/deploy/cleavr.mdx b/src/content/docs/es/guides/deploy/cleavr.mdx deleted file mode 100644 index c872aae501ba1..0000000000000 --- a/src/content/docs/es/guides/deploy/cleavr.mdx +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: Depliega tu proyecto Astro con Cleavr -description: Cómo desplegar tu proyecto de Astro a tu servidor VPS usando Cleavr. -type: deploy -i18nReady: true ---- -import { Steps } from '@astrojs/starlight/components'; - -Puedes desplegar tu proyecto Astro en tu propio Servidor Privado Virtual (VPS) usando [Cleavr](https://cleavr.io/), una herramienta de gestión de despliegues de servidores y aplicaciones. - -:::tip -¡Revisa [la guía de Astro en la documentación de Cleavr](https://docs.cleavr.io/guides/astro)! -::: - -## Prerrequisitos - -Para comenzar, necesitarás: - -- Una cuenta de Cleavr -- Un servidor en tu proveedor de VPS usando Cleavr - -## Agrega tu sitio - - -1. En Cleavr, navega al servidor al que quieres agregar tu proyecto Astro. - -2. Selecciona **Add Site** y completa los detalles de tu aplicación, como el nombre de dominio. - -3. En **App Type**, selecciona 'NodeJS Static' o 'NodeJS SSR' según cómo estés configurando tu aplicación de Astro. - -4. Para las aplicaciones estáticas, establece **Artifact Folder** en `dist`. - -5. Para las aplicaciones SSR: - - Establece **Entry Point** en `entry.mjs`. - - Establece **Artifact Folder** en `dist/server`. - -6. Selecciona **Add** para agregar el sitio a tu servidor. - - -## Configuración y despliegue - - -1. Una vez que se haya agregado tu nuevo sitio, haz clic en **Setup and deploy**. - -2. Selecciona el **VC Profile**, **Repo** y **Branch** para tu proyecto de Astro. - -3. Realiza cualquier configuración adicional necesaria para tu proyecto. - -4. Haz clic en la pestaña **Deployments** y luego haz clic en **Deploy**. - - -¡Felicitaciones, has desplegado tu aplicación de Astro! diff --git a/src/content/docs/es/guides/deploy/cloudflare.mdx b/src/content/docs/es/guides/deploy/cloudflare.mdx deleted file mode 100644 index c9bb7fd016553..0000000000000 --- a/src/content/docs/es/guides/deploy/cloudflare.mdx +++ /dev/null @@ -1,140 +0,0 @@ ---- -title: Despliega tu proyecto de Astro en Cloudflare Pages -description: Cómo desplegar tu proyecto de Astro usando Cloudflare Pages. -type: deploy -i18nReady: true ---- -import ReadMore from '~/components/ReadMore.astro'; -import { Steps } from '@astrojs/starlight/components'; - -Puedes desplegar tu proyecto de Astro en [Cloudflare Pages](https://pages.cloudflare.com/), una plataforma para desarrolladores frontend para colaborar y desplegar sitios web estáticos (JAMstack) y con renderizado en el servidor (SSR). - -Esta guía incluye: - -- [Cómo desplegar a través del dashboard de Cloudflare Pages](#cómo-desplegar-un-proyecto-con-git) -- [Cómo desplegar usando Wrangler, la CLI de Cloudflare](#cómo-desplegar-un-proyecto-usando-wrangler) -- [Cómo desplegar un proyecto con SSR usando `@astrojs/cloudflare`](#cómo-desplegar-un-proyecto-con-ssr) - -## Prerrequisitos - -Para comenzar, necesitarás: - -- Una cuenta de Cloudflare. Si no tienes una, puedes crear una cuenta gratuita de Cloudflare durante el proceso. -- Tu código alojado en un repositorio de [GitHub](https://github.com/) o [GitLab](https://about.gitlab.com/). - -## Cómo desplegar un proyecto con Git - - -1. Crea un nuevo proyecto en Cloudflare Pages. - -2. Sube tu código a un repositorio de git remoto (GitHub, GitLab). - -3. Inicia sesión en el dashboard de Cloudflare y selecciona tu cuenta en **Account Home** > **Workers & Pages** > **Overview**. - -4. Selecciona **Create application**, luego la pestaña **Pages** y después selecciona la opción **Connect to Git**. - -5. Selecciona el proyecto de git que quieres desplegar y haz clic en **Begin setup** - -6. Usa los siguientes ajustes de compilación: - - - **Valor preestablecido del marco**: `Astro` - - **Comando de compilación:** `npm run build` - - **Crear directorio de salida:** `dist` - -7. Haz clic en el botón **Guardar e implementar**. - - -## Cómo desplegar un proyecto usando Wrangler - - -1. Instala [Wrangler CLI](https://developers.cloudflare.com/workers/wrangler/get-started/). - -2. Accede en Wrangler con tu cuenta de Cloudflare usando `wrangler login`. - -3. Ejecuta tu comando de compilación. - -4. Despliega usando `npx wrangler pages deploy dist`. - - -```bash -# Instala Wrangler CLI -npm install -g wrangler -# Accede a tu cuenta de Cloudflare desde la CLI -wrangler login -# Ejecuta el comando de compilación -npm run build -# Crea un nuevo despliegue -npx wrangler pages deploy dist -``` - -Una vez que tus archivos sean subidos, Wrangler te dará una preview URL para inspeccionar tu sitio. Cuando accedas al dashboard de Cloudflare Pages, verás tu nuevo proyecto. - -### Habilitando Preview localmente con Wrangler - -Para que preview funcione, debes instalar `wrangler` - -```bash -pnpm add wrangler --save-dev -``` - -Entonces será posible actualizar el script preview para ejecutar `wrangler` en lugar del comando preview ya integrado en Astro: - -```json title="package.json" -"preview": "wrangler pages dev ./dist" -``` - -## Cómo desplegar un proyecto con SSR - -Puedes construir un proyecto de Astro con SSR para desplegarlo en Cloudflare Pages usando el [adaptador `@astrojs/cloudflare`](/es/guides/integrations-guide/cloudflare/). - -Sigue los pasos a continuación para configurar el adaptador. Puedes desplegar usando cualquiera de las opciones mencionadas anteriormente. - -### Instalación rápida - -Añade el adaptador de Cloudflare que activa SSR en tu proyecto de Astro con el siguiente comando `astro add` que se muestra debajo. Este instalará el adaptador y hará los cambios apropiados a tu archivo `astro.config.mjs` en un solo paso. - -```bash -npx astro add cloudflare -``` -### Instalación manual - -Si prefieres instalar el adaptador manualmente, sigue los siguientes pasos: - - -1. Añadir el adaptador `@astrojs/cloudflare` a las dependencias de tu proyecto usando tu gestor de paquetes preferido. Si estás usando npm o no estás seguro, ejecuta esto en la terminal: - - - ```bash - npm install @astrojs/cloudflare - ``` - -2. Añadir lo siguiente a tu archivo `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() - }); - ``` - - -Aprende más sobre [SSR en Astro](/es/guides/on-demand-rendering/). - -## Solución de problemas - -### Hidratación del lado del cliente - -La hidratación del lado del cliente puede fallar como resultado de la configuración de Auto Minify de Cloudflare. Si ves `Hydration completed but contains mismatches` en la consola, asegúrate de deshabilitar Auto Minify en la configuración de Cloudflare. - -### APIs de tiempo de ejecución de Node.js - -Si estás construyendo un proyecto que está usando renderizado bajo demanda con [el Adaptador de SSR de Cloudflare](/es/guides/integrations-guide/cloudflare/) y el servidor falla en construir con un mensaje de error como `[Error] Could not resolve "XXXX. The package "XXXX" wasn't found on the file system but is built into node.`: - -- Esto significa que un paquete o importación que estás utilizando en el entorno del lado del servidor no es compatible con las [APIs de tiempo de ejecución de Cloudflare](https://developers.cloudflare.com/workers/runtime-apis/nodejs/). - -- Si estás importando directamente una API de tiempo de ejecución de Node.js, por favor consulta la documentación de Astro en [compatibilidad con Node.js](/es/guides/integrations-guide/cloudflare/#compatibilidad-con-nodejs) de Cloudflare para conocer los pasos adicionales sobre como resolver esto. - -- Si estás importando un paquete que importa una API de tiempo de ejecución de Node.js, verifica con el autor del paquete si admiten la sintaxis de importación `node:*`. Si no lo hacen, es posible que necesites encontrar un paquete alternativo. diff --git a/src/content/docs/es/guides/deploy/deno.mdx b/src/content/docs/es/guides/deploy/deno.mdx deleted file mode 100644 index 1b9cb29897c96..0000000000000 --- a/src/content/docs/es/guides/deploy/deno.mdx +++ /dev/null @@ -1,184 +0,0 @@ ---- -title: Despliega tu proyecto de Astro con Deno -description: Cómo desplegar tu proyecto de Astro en la web utilizando Deno. -type: deploy -i18nReady: true ---- -import ReadMore from '~/components/ReadMore.astro'; -import { Steps } from '@astrojs/starlight/components'; - -Puedes desplegar tu proyecto de Astro con renderizado en el servidor (SSR) en [Deno Deploy](https://deno.com/deploy), un sistema distribuido que ejecuta JavaScript, TypeScript y WebAssembly en el edge, alrededor del mundo. - -Esta guía incluye instrucciones para desplegar en Deno Deploy a través de GitHub Actions o de la CLI de Deno Deploy. - -## Requisitos - -Esta guía supone que ya tienes instalado [Deno](https://deno.com/). - -## Configuración del proyecto - -Esta página proporciona instrucciones para desplegar tu proyecto de Astro en [Deno Deploy](https://deno.com/deploy) como un sitio renderizado en el servidor (SSR). - -Para desplegar un sitio estático, consulta [el tutorial de Deno Deploy para sitios estáticos](https://docs.deno.com/deploy/tutorials/static-site). - -### Adaptador para SSR - -Para activar SSR en tu proyecto de Astro y desplegarlo en Deno Deploy: - -Añadir [el adaptador de Deno][Deno adapter] para activar SSR en tu proyecto de Astro con el siguiente comando `astro add` que se muestra debajo. Este instalará el adaptador y hará los cambios apropiados a tu archivo `astro.config.mjs` en un solo paso. - - -```bash -npx astro add deno -``` - -Si prefieres instalar el adaptador manualmente, sigue los siguientes dos pasos: - - -1. Añadir [el adaptador `@deno/astro-adapter`][Deno adapter] a las dependencias de tu proyecto usando tu gestor de paquetes preferido. Si estás usando npm o no estás seguro, ejecuta esto en la terminal: - - ```bash - npm install @deno/astro-adapter - ``` - -2. Actualiza el archivo de configuración del proyecto `astro.config.mjs` con los cambios a continuación. - - ```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(), - }); - ``` - - Luego, actualiza el script `preview` en `package.json` con el siguiente cambio. - - ```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" - } - } - ``` - - Ahora puedes utilizar este comando para previsualizar tu proyecto de Astro en producción localmente con Deno. - - ```bash - npm run preview - ``` - - -## Cómo desplegar un sitio de Astro SSR - -Puedes desplegar en Deno Deploy a través de GitHub Actions o utilizando la CLI (interfaz de línea de comandos) de Deno Deploy. - -### Despliegue con GitHub Actions - -Si tu proyecto está almacenado en GitHub, la [página web de Deno Deploy](https://dash.deno.com/) te guiará en la configuración de GitHub Actions para desplegar tu proyecto de Astro. - - -1. Sube tu código a un repositorio público o privado de GitHub. - -2. Inicia sesión en [Deno Deploy](https://dash.deno.com/) con tu cuenta de GitHub y haz clic en [New Project](https://dash.deno.com). - -3. Selecciona tu repositorio, la rama desde la que quieres desplegar, y selecciona el modo **GitHub Action**. (Tu proyecto de Astro requiere un paso de construcción, y no puede usar el modo Automático). - -4. En tu proyecto de Astro, crea un nuevo archivo en `.github/workflows/deploy.yml` y pega el YAML a continuación. Esto es similar al YAML dado por Deno Deploy, con los pasos adicionales necesarios para tu proyecto de Astro. - - ```yaml - name: Deploy - on: [push] - - jobs: - deploy: - name: Deploy - runs-on: ubuntu-latest - permissions: - id-token: write # Necesario para la autentificación con Deno Deploy - contents: read # Necesario para clonar el repositorio - - steps: - - name: Clonar el repositorio - uses: actions/checkout@v4 - - # ¿No usas npm? Cambia `npm ci` por `yarn install` o `pnpm i`. - - name: Instalar las dependencias - run: npm ci - - # ¿No usas npm? Cambia `npm run build` por `yarn build` o `pnpm run build`. - - name: Construir Astro - run: npm run build - - - name: Subir a Deno Deploy - uses: denoland/deployctl@v1 - with: - project: my-deno-project # TODO: sustituir por el nombre del proyecto Deno Deploy - entrypoint: server/entry.mjs - root: dist - ``` - -5. Después de hacer commit de este archivo YAML, y de subir a GitHub en tu rama de despliegue configurada, ¡el despliegue comenzará automáticamente! - - Puedes seguir el progreso utilizando la pestaña "Actions" de tu repositorio de GitHub, o en [Deno Deploy](https://dash.deno.com). - - -### Despliegue con la CLI - - -1. Instala la [Deno Deploy CLI](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 - ``` - -2. Ejecuta el paso de construcción de tu proyecto de Astro. - - ```bash - npm run build - ``` - -3. ¡Ejecuta `deployctl` para desplegar! - - En el siguiente comando, sustituye `` por tu [Token de Acceso Personal](https://dash.deno.com/account#access-tokens) y `` por el nombre de tu proyecto en Deno Deploy. - - ```bash - DENO_DEPLOY_TOKEN= deployctl deploy --project= --no-static --include=./dist ./dist/server/entry.mjs - ``` - - Puedes seguir todos tus despliegues en [Deno Deploy](https://dash.deno.com). - -4. (Opcional) Para simplificar la construcción y el despliegue en un solo comando, añade un script `deploy-deno` en `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" - } - } - ``` - - Entonces puedes usar este comando para construir y desplegar tu sitio Astro en un solo paso. - - ```bash - DENO_DEPLOY_TOKEN= npm run deno-deploy - ``` - - -Lee más sobre [SSR en Astro](/es/guides/on-demand-rendering/). - -[Deno adapter]: https://github.com/denoland/deno-astro-adapter diff --git a/src/content/docs/es/guides/deploy/flightcontrol.mdx b/src/content/docs/es/guides/deploy/flightcontrol.mdx deleted file mode 100644 index de6125ac4cf7b..0000000000000 --- a/src/content/docs/es/guides/deploy/flightcontrol.mdx +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: Despliega tu proyecto de Astro en AWS con Flightcontrol -description: Cómo desplegar tu proyecto de Astro en AWS con Flightcontrol -type: deploy -i18nReady: true ---- -import { Steps } from '@astrojs/starlight/components'; - -Puedes desplegar tu proyecto de Astro utilizando [Flightcontrol](https://www.flightcontrol.dev?ref=astro), que proporciona despliegues totalmente automatizados en tu cuenta de AWS. - -Es compatible con sitios estáticos y SSR. - -# ¿Cómo desplegar? - - -1. Crea una cuenta de Flightcontrol en [app.flightcontrol.dev/signup](https://app.flightcontrol.dev/signup?ref=astro). - -2. Ve a [app.flightcontrol.dev/projects/new/1](https://app.flightcontrol.dev/projects/new/1). - -3. Conecta tu cuenta de GitHub y selecciona tu repositorio. - -4. Selecciona el "Tipo de configuración" deseado: - - `GUI` (toda la configuración administrada a través de flightcontrol dashboard) donde seleccionará el preajuste `Astro Static` o `Astro SSR` - - `flightcontrol.json` (opción "infraestructura como código" donde toda la configuración está alojada en tu repositorio) donde seleccionará una configuración ejemplo de Astro, luego la agregará al repositorio como `flightcontrol.json`. - -5. Ajusta cualquier configuración según sea necesario. - -6. Haz clic en "Crear proyecto" y completa los pasos necesarios, como vincular su cuenta de AWS. - - -### Configuración SSR - -Para desplegar tu proyecto como SSR, asegúrate de configurar primero el adaptador [`@astrojs/node`](/es/guides/integrations-guide/node/). Luego, siga los pasos anteriores para elegir las configuraciones apropiadas para Astro SSR. diff --git a/src/content/docs/es/guides/deploy/flyio.mdx b/src/content/docs/es/guides/deploy/flyio.mdx deleted file mode 100644 index b30729dbe6759..0000000000000 --- a/src/content/docs/es/guides/deploy/flyio.mdx +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: Despliega tu sitio de Astro en Fly.io -description: Como desplegar tu sitio de Astro en la web utilizando Fly.io. -type: deploy -i18nReady: true -stub: true ---- -import { Steps } from '@astrojs/starlight/components'; - -Puedes desplegar tu proyecto de Astro en [Fly.io](https://fly.io/), una plataforma para ejecutar aplicaciones full stack y bases de datos cerca de tus usuarios. - -## Configuración del proyecto - -Tu proyecto de Astro puede ser desplegado en Fly.io como un sitio estático, o como un sitio renderizado en el servidor (SSR). - -### Sitio Estático - -Por defecto tu proyecto de Astro es un sitio estático. No necesitas ninguna configuración adicional para desplegar un sitio estático de Astro en Fly.io. - -### Adaptador para SSR - -Para habilitar el renderizado bajo demanda en tu proyecto de Astro y desplegarlo en Fly.io, agrega [el adaptador de Node.js](/es/guides/integrations-guide/node/). - -## ¿Cómo desplegar? - - -1. [Regístrate en Fly.io](https://fly.io/docs/getting-started/log-in-to-fly/#first-time-or-no-fly-account-sign-up-for-fly) si aún no lo has hecho. - -2. [Instala `flyctl`](https://fly.io/docs/hands-on/install-flyctl/), tu centro de comandos de aplicaciones Fly.io. - -3. Ejecuta el siguiente comando en tu terminal. - - ```bash - fly launch - ``` - - `flyctl` detectará automáticamente Astro, configurará los ajustes correctos, construirá tu imagen y la desplegará en la plataforma Fly.io. - - -## Generando tu Dockerfile para Astro. - -Si aún no tienes un Dockerfile, `fly launch` lo generará por ti, además de preparar un archivo `fly.toml`. Para proyectos `server` o `hybrid`, este Dockerfile incluirá el comando de inicio apropiado y las variables de entorno. - -También puedes crear tu propio Dockerfile utilizando el [generador de Dockerfile](https://www.npmjs.com/package/@flydotio/dockerfile) y luego ejecutarlo usando el comando `npx dockerfile` para aplicaciones de Node o `bunx dockerfile` para aplicaciones de Bun. - -## Recursos oficiales - -- Echa un vistazo a [la documentación oficial de Fly.io](https://fly.io/docs/js/frameworks/astro/) \ No newline at end of file diff --git a/src/content/docs/es/guides/deploy/gitlab.mdx b/src/content/docs/es/guides/deploy/gitlab.mdx deleted file mode 100644 index 7a817bbe505e3..0000000000000 --- a/src/content/docs/es/guides/deploy/gitlab.mdx +++ /dev/null @@ -1,120 +0,0 @@ ---- -title: Despliega tu proyecto de Astro en GitLab Pages -description: Cómo desplegar tu proyecto de Astro usando GitLab Pages. -type: deploy -i18nReady: true ---- -import { Steps } from '@astrojs/starlight/components'; - -Puedes usar [GitLab Pages](https://docs.gitlab.com/ee/user/project/pages/) para alojar un proyecto de Astro para tu proyecto, grupo, o cuenta de usuario en [GitLab](https://about.gitlab.com/). - -:::tip[¿Buscas un ejemplo?] -¡Revisa [el proyecto de ejemplo de Astro en GitLab Pages](https://gitlab.com/pages/astro)! -::: - -## Cómo desplegar - -Puede desplegar un sitio de Astro en GitLab Pages usando GitLab CI/CD para construir y desplegar automáticamente tu sitio. Para hacer esto, tu código fuente debe estar alojado en GitLab y necesitas hacer los siguientes cambios en tu proyecto de Astro: - - -1. Establece las opciones [`site`](/es/reference/configuration-reference/#site) y [`base`](/es/reference/configuration-reference/#base) en `astro.config.mjs`. - - ```js title="astro.config.mjs" ins={4-5} - import { defineConfig } from 'astro/config'; - - export default defineConfig({ - site: 'https://.gitlab.io', - base: '/', - outDir: 'public', - publicDir: 'static', - }); - ``` - - `site` - - El valor para `site` debe ser uno de los siguientes: - - - El siguiente URL basado en el nombre de tu grupo: `https://.gitlab.io` - - El siguiente URL basado en tu nombre de usuario: `https://.gitlab.io` - - Tu dominio personalizado si lo tienes configurado en la configuración de tu proyecto de GitLab: `https://example.com` - - Para instancias auto-alojadas de GitLab, reemplaza `gitlab.io` con el dominio de Pages de tu instancia. - - `base` - - Un valor para `base` puede ser requerido para que Astro trate el nombre de tu repositorio (por ejemplo, `/mi-repo`) como la raíz de tu sitio web. - - :::note - No establezcas un parámetro `base` si tu página se sirve desde la carpeta raíz. - ::: - - El valor para `base` debe ser el nombre de tu repositorio comenzando con una barra diagonal, por ejemplo `/mi-blog`. Esto es para que Astro entienda que la raíz de tu sitio web es `/mi-repo`, en lugar de la raíz predeterminada `/`. - - :::caution - Cuando este valor está configurado, todos los enlaces internos de tus páginas deben tener el prefijo de tu valor `base`: - - ```astro ins="/my-repo" - Acerca - ``` - - Ver más sobre [configurar un valor `base`](/es/reference/configuration-reference/#base) - ::: - -2. Renombra el directorio `public/` a `static/`. - -3. Establece `outDir: 'public'` en `astro.config.mjs`. Esta configuración indica a Astro que coloque la salida de la compilación estática en una carpeta llamada `public`, que es la carpeta requerida por GitLab Pages para los archivos expuestos. - - Si estás usando el [directorio `public/`](/es/basics/project-structure/#public) como fuente de archivos estáticos en tu proyecto de Astro, renombralo y usa ese nuevo nombre del directorio en `astro.config.mjs` para el valor de `publicDir`. - - Por ejemplo, estos son los ajustes correctos de `astro.config.mjs` cuando el directorio `public/` es renombrado a `static/`: - - ```js title="astro.config.mjs" ins={4-5} - import { defineConfig } from 'astro/config'; - - export default defineConfig({ - outDir: 'public', - publicDir: 'static', - }); - ``` - -4. Cambia la salida de la compilación en `.gitignore`. En nuestro ejemplo necesitamos cambiar `dist/` a `public/`: - - ```diff title=".gitignore" - # build output - -dist/ - +public/ - ``` - -5. Crea un archivo llamado `.gitlab-ci.yml` en la raíz de tu proyecto con el contenido a continuación. Esto construirá y desplegará tu sitio cada vez que hagas cambios en tu contenido: - - ```yaml title=".gitlab-ci.yml" - pages: - # La imagen de Docker que se usará para construir tu app - image: node:lts - - before_script: - - npm ci - - script: - # Especifica los pasos involucrados para construir tu app aquí - - npm run build - - artifacts: - paths: - # El directorio que contiene los archivos construidos para ser publicados. - # Debe llamarse "public". - - public - - only: - # Activa una nueva compilación y despliega solo cuando haya un push a la - # rama(s) a continuación - - main - ``` - -6. Haz un commit de tus cambios y súbelos a GitLab. - -7. En GitLab, ve al menú **Deploy** de tu repositorio y selecciona **Pages**. Aquí verás la URL completa de tu sitio web de GitLab Pages. Para asegurarte de que estás usando el formato de URL `https://username.gitlab.io/my-repo`, desmarca la configuración **Use unique domain** en esta página. - - - -¡Tu sitio debería estar publicado! Cuando hagas cambios en tu repositorio de proyecto de Astro, el pipeline CI/CD de GitLab los desplegará automáticamente para ti. diff --git a/src/content/docs/es/guides/deploy/google-cloud.mdx b/src/content/docs/es/guides/deploy/google-cloud.mdx deleted file mode 100644 index 8e01975e29758..0000000000000 --- a/src/content/docs/es/guides/deploy/google-cloud.mdx +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: Despliega tu proyecto de Astro en Google Cloud -description: Cómo desplegar tu proyecto de Astro usando Google Cloud. -type: deploy -i18nReady: true ---- -import { Steps } from '@astrojs/starlight/components'; - -[Google Cloud](https://cloud.google.com/?hl=es-419) es una plataforma integral de alojamiento, que puede ser usada para desplegar un proyecto de Astro. - -## Cómo desplegar - -### Cloud Storage (solo estático) - - -1. [Crea un nuevo proyecto GCP](https://console.cloud.google.com/projectcreate), o selecciona uno que ya tengas. - -2. Crea un nuevo bucket dentro de [Cloud Storage](https://cloud.google.com/storage?hl=es-419). - -3. Asígnale un nombre y completa otros ajustes requeridos. - -4. Sube tu directorio `dist` en él o súbelo usando [Cloud Build](https://cloud.google.com/build?hl=es-419). - -5. Habilita el acceso público añadiendo un nuevo permiso a `allUsers` llamado `Storage Object Viewer`. - -6. Edita la configuración de sitio y agrega el `ìndex.html` como punto de entrada y el `404.html` como página de error. - - -### Cloud Run (SSR y estático) - -Cloud Run es una plataforma sin servidor que te permite ejecutar un contenedor sin tener que administrar ninguna infraestructura. Puede ser usada para desplegar sitios estáticos y SSR. - -#### Prepara el servicio - - -1. [Crea un nuevo proyecto GCP](https://console.cloud.google.com/projectcreate), o selecciona uno que ya tengas. - -2. Asegúrate de que la [API de Cloud Run](https://console.cloud.google.com/apis/library/run.googleapis.com) esté habilitada. - -3. Crea un nuevo servicio. - - -#### Crea un Dockerfile y Compila el Contenedor - -Antes de que puedas desplegar tu sitio de Astro en Cloud Run, necesitas crear un Dockerfile que se usará para construir el contenedor. Encuentra más información sobre [cómo usar Docker con Astro](/es/recipes/docker/#creando-un-dockerfile) en nuestra sección de recetas. - -Una vez que el Dockerfile está creado, compílalo en una imagen y súbelo a Google Cloud. Hay varias formas de lograrlo: - -**Compila localmente usando Docker**: - -Usa el comando `docker build` para compilar la imagen, `docker tag` para darle una etiqueta, y `docker push` para subirla a un registro. En el caso de Google Cloud, [`Artifact Registry`](https://cloud.google.com/artifact-registry/docs/docker/pushing-and-pulling?hl=es-419) es la opción más fácil, pero también puedes usar [Docker Hub](https://hub.docker.com/). - -```bash -# compila tu contenedor -docker build . - -docker tag SOURCE_IMAGE HOSTNAME/PROJECT-ID/TARGET-IMAGE:TAG - -# Empuja tu imagen a un registro -docker push HOSTNAME/PROJECT-ID/IMAGE:TAG -``` - -Cambia los valores siguientes en los comandos anteriores para que coincidan con tu proyecto: - -- `SOURCE_IMAGE`: el nombre de la imagen local o el ID de la imagen. -- `HOSTNAME`: el host del registro (`gcr.io`, `eu.gcr.io`, `asia.gcr.io`, `us.gcr.io`). -- `PROJECT`: el ID de tu proyecto de Google Cloud. -- `TARGET-IMAGE`: el nombre para la imagen cuando se almacena en el registro. -- `TAG` es la versión asociada con la imagen. - -[Lee más en la documentación de Google Cloud.](https://cloud.google.com/artifact-registry/docs/docker/pushing-and-pulling?hl=es-419) - -**Usando otra herramienta**: - -Puedes usar una herramienta de CI/CD que soporte Docker, como [GitHub Actions](https://github.com/marketplace/actions/push-to-gcr-github-action). - -**Compilar usando [Cloud Build](https://cloud.google.com/build?hl=es-419)**: - -En vez de compilar el Dockerfile localmente, puedes instruir a Google Cloud a compilar la imagen de forma remota. Consulta la [documentación de Google Cloud Build aquí](https://cloud.google.com/build/docs/build-push-docker-image). - -#### Desplegando el contenedor - -El despliegue puede ser manejado manualmente en tu terminal [usando `gcloud`](https://cloud.google.com/run/docs/deploying#service) o automáticamente usando [Cloud Build](https://cloud.google.com/build) o cualquier otro sistema de CI/CD. - -:::note[¿Necesitas acceso público?] -¡No olvides agregar el permiso `Cloud Run Invoker` al grupo `allUsers` en la configuración de permisos de Cloud Run! -::: diff --git a/src/content/docs/es/guides/deploy/google-firebase.mdx b/src/content/docs/es/guides/deploy/google-firebase.mdx deleted file mode 100644 index 02bbf7be8dfa5..0000000000000 --- a/src/content/docs/es/guides/deploy/google-firebase.mdx +++ /dev/null @@ -1,132 +0,0 @@ ---- -title: Despliega tu proyecto de Astro usando Firebase Hosting de Google -description: Cómo desplegar tu proyecto de Astro usando Firebase Hosting de Google. -type: deploy -i18nReady: true ---- -import { Steps } from '@astrojs/starlight/components'; -import PackageManagerTabs from '~/components/tabs/PackageManagerTabs.astro'; - -[Firebase Hosting](https://firebase.google.com/products/hosting) es un servicio provisto por la plataforma de desarrollo de Google [Firebase](https://firebase.google.com/), el cual puede ser usado para desplegar un proyecto de Astro. - -Consulta nuestra guía para [desplegar en el servicio de Hosteo de Firebase](/es/guides/backend/google-firebase/). - -## Configuración de proyecto - -Tu proyecto de Astro puede ser desplegado en Firebase como un sitio estático o como un sitio renderizado del lado del servidor (SSR). - -### Sitio estático - -Tu proyecto de Astro es un sitio estático por defecto. No necesitas ninguna configuración extra para desplegar un sitio estático de Astro en Firebase. - -### Adaptador para SSR - -Para habilitar SSR en tu proyecto de Astro y desplegarlo en Firebase, agrega el [adaptador de Node.js](/es/guides/integrations-guide/node/). - -:::note -Desplegar un sitio SSR de Astro en Firebase requiere el [plan Blaze](https://firebase.google.com/pricing) o superior. -::: - -## ¿Cómo desplegar? - - -1. Instala la [CLI de Firebase](https://github.com/firebase/firebase-tools). Esta es una herramienta de línea de comandos que te permite interactuar con Firebase desde la terminal. - - - - ```shell - npm install firebase-tools - ``` - - - ```shell - pnpm add firebase-tools - ``` - - - ```shell - yarn add firebase-tools - ``` - - - -2. Autentica la CLI de Firebase con tu cuenta de Google. Esto abrirá una ventana de navegador donde puedes iniciar sesión con tu cuenta de Google. - - - - ```shell - npx firebase login - ``` - - - ```shell - pnpm exec firebase login - ``` - - - ```shell - yarn firebase login - ``` - - - -3. Habilita el soporte experimental para frameworks web. Esta es una característica experimental que permite a la CLI de Firebase detectar y configurar los ajustes de despliegue para Astro. - - - - ```shell - npx firebase experiments:enable webframeworks - ``` - - - ```shell - pnpm exec firebase experiments:enable webframeworks - ``` - - - ```shell - yarn firebase experiments:enable webframeworks - ``` - - - -4. Inicializa el servicio de Alojamiento de Firebase en tu proyecto. Esto creará un archivo `firebase.json` y `.firebaserc` en la raíz de tu proyecto. - - - - ```shell - npx firebase init hosting - ``` - - - ```shell - pnpm exec firebase init hosting - ``` - - - ```shell - yarn firebase init hosting - ``` - - - -5. Despliega tu sitio en el servicio de Alojamiento de Firebase. Esto construirá tu sitio de Astro y lo desplegará en Firebase. - - - - ```shell - npx firebase deploy --only hosting - ``` - - - ```shell - pnpm exec firebase deploy --only hosting - ``` - - - ```shell - yarn firebase deploy --only hosting - ``` - - - \ No newline at end of file diff --git a/src/content/docs/es/guides/deploy/heroku.mdx b/src/content/docs/es/guides/deploy/heroku.mdx deleted file mode 100644 index 697dfcd5008b9..0000000000000 --- a/src/content/docs/es/guides/deploy/heroku.mdx +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: Despliega tu proyecto de Astro en Heroku -description: Cómo desplegar tu proyecto de Astro usando Heroku. -type: deploy -i18nReady: true ---- -import { Steps } from '@astrojs/starlight/components'; - -[Heroku](https://www.heroku.com/) es una platform-as-a-service para construir, ejecutar, y administrar aplicaciones modernas en la nube. Puedes desplegar un proyecto de Astro en Heroku usando esta guía. - -:::danger -Las siguientes instrucciones usan [el paquete obsoleto `heroku-static-buildpack`](https://github.com/heroku/heroku-buildpack-static#warning-heroku-buildpack-static-is-deprecated). Por favor consulta la [documentación de Heroku para usar `heroku-buildpack-nginx`](https://github.com/dokku/heroku-buildpack-nginx) en su lugar. -::: - -## ¿Cómo desplegar? - - -1. Instala la [CLI de Heroku](https://devcenter.heroku.com/articles/heroku-cli). - -2. Crea una cuenta en [Heroku](https://signup.heroku.com/). - -3. Ejecuta `heroku login` e ingresa tus credenciales de Heroku: - - ```bash - $ heroku login - ``` - -4. Crea un archivo llamado `static.json` en la raíz de tu proyecto con el siguiente contenido: - - ```json title="static.json" - { - "root": "./dist" - } - ``` - - Esta es la configuración de tu proyecto; aprende más en [heroku-buildpack-static](https://github.com/heroku/heroku-buildpack-static). - -5. Configura tu repositorio remoto en Heroku: - - ```bash - # cambio en la versión - $ git init - $ git add . - $ git commit -m "My site ready for deployment." - - # crea una nueva app con un nombre en específico - $ heroku apps:create example - - # establece buildpack para sitios estáticos - $ heroku buildpacks:set https://github.com/heroku/heroku-buildpack-static.git - ``` - -6. Despliega tu proyecto: - - ```bash - # publica el sitio - $ git push heroku master - - # abre una ventana del navegador para ver el dashboard de la CLI de Heroku - $ heroku open - ``` - \ No newline at end of file diff --git a/src/content/docs/es/guides/deploy/index.mdx b/src/content/docs/es/guides/deploy/index.mdx deleted file mode 100644 index ab2a737d10801..0000000000000 --- a/src/content/docs/es/guides/deploy/index.mdx +++ /dev/null @@ -1,118 +0,0 @@ ---- -title: Despliega tu sitio Astro -description: Cómo desplegar tu sitio Astro en la web. -i18nReady: true ---- -import DeployGuidesNav from '~/components/DeployGuidesNav.astro'; -import PackageManagerTabs from '~/components/tabs/PackageManagerTabs.astro' -import { Steps } from '@astrojs/starlight/components' - -**¿Listo para construir y desplegar tu proyecto Astro?** Sigue una de nuestras guías para diferentes servicios de despliegue o desplázate hacia abajo para obtener orientación general sobre el despliegue de un proyecto de Astro. - -## Guías de despliegue - - - -## Opciones de despliegue rápido - -Puedes crear y desplegar tu proyecto de Astro en varias plataformas rápidamente utilizando la interfaz de usuario (UI) en su página web o la interfaz de línea de comando (CLI). - -### Web UI - -Una forma rápida de desplegar tu página web es conectar un repositorio de Git remoto a tu proyecto de Astro (por ejemplo, GitHub, GitLab, Bitbucket) a un servicio de hosting y aprovechar continuous integration con Git. - -Estas plataformas de hosting detectan automáticamente los cambios en el repositorio de origen de tu proyecto de Astro, construyen tu proyecto y lo despliegan en una URL personalizada o en tu dominio personal. A menudo, configurar el despliegue en estas plataformas seguirá pasos como los siguientes: - - -1. Agrega tu repositorio a un repositorio remoto de Git (por ejemplo, en GitHub, GitLab, Bitbucket) - -2. Elige un host que admita **continuous integration** (por ejemplo, [Netlify](/es/guides/deploy/netlify/) o [Vercel](/es/guides/deploy/vercel/)) e importa tu repositorio Git como un nuevo sitio/proyecto. - - Muchos hosts comunes reconocerán su proyecto como un sitio de Astro y elegirán los ajustes de configuración apropiados para construir y desplegar tu proyecto como se muestra a continuación. (De lo contrario, estos ajustes se pueden cambiar). - - :::note[Configuración de implementación] - - **Comando de construcción:** `astro build` o `npm run build` - - **Directorio de publicación:** `dist` - ::: - -3. Haz clic en "Desplegar" y tu nuevo sitio web se creará en una URL única para ese host (por ejemplo, `new-astro-site.netlify.app`). - - -El host se configurará automáticamente para observar la rama principal del repositorio de Git en busca de cambios, para reconstruir y volver a publicar tu proyecto en cada push. Estos ajustes normalmente se pueden configurar en la UI del panel de control de su proveedor de hosting. - -### Despliegue desde el CLI - -Algunos hosts tendrán su propia interfaz de línea de comandos (CLI) que puedes instalar globalmente en tu máquina usando npm. A menudo, el uso de una CLI para desplegar se parece a lo siguiente: - - -1. Instala la CLI del host globalmente, por ejemplo: - - - - ```shell - npm install --global netlify-cli - ``` - - - ```shell - pnpm add --global netlify-cli - ``` - - - ```shell - yarn global add netlify-cli - ``` - - - -2. Ejecuta la CLI y sigue las instrucciones de autorización, configuración, etc. - -3. Crea tu proyecto y despliégalo en el host - - Muchos proveedores de hosting construirán y desplegarán tu proyecto por ti. Por lo general, reconocerán tu proyecto como un sitio de Astro y elegirán los ajustes de configuración apropiados para construir y desplegar como se muestra a continuación. (De lo contrario, estos ajustes se pueden cambiar). - - :::note[Configuración de implementación] - - **Comando de construcción:** `astro build` o `npm run build` - - **Directorio de publicación:** `dist` - ::: - - - Otros proveedores de hosting requerirán que [construyas tu sitio localmente](#construyendo-tu-proyecto-localmente) y realizes el despliegue usando la línea de comandos. - - -## Construyendo tu proyecto localmente - -Muchos hosts como Netlify y Vercel construirán tu proyecto por ti y lo publicarán en la web automáticamente. Sin embargo, algunos hosts requerirán que construyas tu proyecto localmente y luego ejecutes el comando de despliegue o subas el resultado de la compilación. - -También es posible que desees compilar tu proyecto localmente para obtener una vista previa o para detectar posibles errores y advertencias en el entorno. - -Ejecuta el comando `npm run build` para construir tu proyecto Astro. - - - - ```shell - npm run build - ``` - - - ```shell - pnpm run build - ``` - - - ```shell - yarn run build - ``` - - - -De forma predeterminada, el resultado de compilación se colocará en `dist/`. Esta ubicación se puede cambiar usando la [opción de configuración `outDir`](/es/reference/configuration-reference/#outdir). - -## Adición de un adaptador para SSR - -:::note -Antes de implementar tu proyecto de Astro con [SSR (renderizado en el servidor)](/es/guides/on-demand-rendering/) habilitado, asegúrate de tener: - -- Instalado el [adaptador apropiado](/es/guides/on-demand-rendering/) en tus dependencias (ya sea manualmente, o usando el comando `astro add`, p. ej. `npx astro add netlify`). -- [Agregado el adaptador](/es/reference/configuration-reference/#adapter) a tu *import* y *default export* en tu archivo `astro.config.mjs` cuando es instalado manualmente. (¡El comando `astro add` se hará cargo de este paso por ti!) -::: diff --git a/src/content/docs/es/guides/deploy/kinsta.mdx b/src/content/docs/es/guides/deploy/kinsta.mdx deleted file mode 100644 index 445e4d7fbe43e..0000000000000 --- a/src/content/docs/es/guides/deploy/kinsta.mdx +++ /dev/null @@ -1,107 +0,0 @@ ---- -title: Despliega tu projecto de Astro en el hosting de aplicaciones de Kinsta -description: Como desplegar tu projecto de Astro en el hosting de aplicaciones de Kinsta -type: deploy -i18nReady: true ---- -import { Steps } from '@astrojs/starlight/components'; - -Puedes usar el [Hosting de aplicaciones Kinsta](https://kinsta.com/application-hosting/) para deplegar tu projecto Astro a la nube. - -## Configuración del proyecto Astro - - -### Alojamiento estático - -:::tip[¿Buscas un ejemplo?] -¡Mira [el proyecto oficial de Kinsta para Astro](https://github.com/kinsta/hello-world-astro)! -::: - -Para desplegar tu proyecto en el **hosting de aplicaciones Kinsta**, debes: -- Incluir un campo `name` en tu `package.json`. (Esto puede ser cualquier cosa y no afectará su despliegue). -- Incluir un script `build` en tu `package.json`. (Tu proyecto de Astro ya incluye uno). -- Instalar el paquete [`serve`](https://www.npmjs.com/package/serve) y configurar el script `start` en `serve dist/`. - -Aquí están las líneas necesarias en tu archivo `package.json`: - -```json title="package.json" {2,5,6} ins={12} "serv dist/" -{ - "name": "anything", // Esto es obligatorio, pero el valor no es importante. - "scripts": { - "dev": "astro dev", - "start": "serve dist/", - "build": "astro build", - "preview": "astro preview", - "astro": "astro" - }, - "dependencies": { - "astro": "^2.2.0", - "serve": "^14.0.1" - }, -} -``` - -### SSR - -:::tip[¿Buscas un ejemplo?] -¡Echa un vistazo [al proyecto oficial de Kinsta Application Hosting Starter para Astro SSR](https://github.com/kinsta/hello-world-astro-ssr)! -::: - -Para alojar tu proyecto en **Kinsta Application Hosting**, debes: -- Incluir un campo `name` en tu `package.json`. (Esto puede ser cualquier cosa y no afectará su despliegue.) -- Incluir un script `build` en tu `package.json`. (Tu proyecto de Astro ya debería incluir esto). -- Instalar el paquete [`@astrojs/node`](https://www.npmjs.com/package/@astrojs/node) y configura el script `start` en `node ./dist/server/entry.mjs`. -- Configurar `astro.config.mjs` para usar `@astrojs/node` y para usar `host: true`. - -Aqui están las líneas necesarias para tu archivo `package.json`: -```json title="package.json" {2,5,6} ins={12} "node ./dist/server/entry.mjs" -{ - "name": "anything", // Esto es obligatorio, pero el valor no es importante. - "scripts": { - "dev": "astro dev", - "start": "node ./dist/server/entry.mjs", - "build": "astro build", - "preview": "astro preview", - "astro": "astro" - }, - "dependencies": { - "astro": "^2.2.0", - "@astrojs/node": "^5.1.1" - }, -} -``` - -Aqui están las líneas necesarias para tu archivo `astro.config.mjs`: -```js title="astro.config.mjs" - import { defineConfig } from 'astro/config'; - import node from "@astrojs/node"; - export default defineConfig({ - output: 'server', - adapter: node({ - mode: "standalone" - }), - server: { - host: true - } - }); -``` - -## ¿Cómo desplegar? - -Una vez que el repositorio de GitHub de tu proyecto esté conectado, puedes activar despliegues manuales en la aplicación de Kinsta en el **Panel de administración de MyKinsta**. También puedes configurar despliegues automáticos en el panel de administración. - -### Configurando una nueva aplicación en Kinsta - - -1. Dirigete al panel de administración de [Mi Kinsta](https://my.kinsta.com/). - -2. Vaya a la pestaña **Aplicaciones**. - -3. Conecta tu repositorio de GitHub. - -4. Presione el botón **Agregar servicio** > **Aplicación**. - -5. Siga los pasos del asistente. - -6. Tu aplicación está desplegada. - \ No newline at end of file diff --git a/src/content/docs/es/guides/deploy/microsoft-azure.mdx b/src/content/docs/es/guides/deploy/microsoft-azure.mdx deleted file mode 100644 index ab3c933e84d86..0000000000000 --- a/src/content/docs/es/guides/deploy/microsoft-azure.mdx +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: Despliega tu proyecto de Astro en Microsoft Azure -description: Cómo desplegar tu proyecto de Astro usando Microsoft Azure -type: deploy -i18nReady: true ---- -import { Steps } from '@astrojs/starlight/components'; - -[Azure](https://azure.microsoft.com/) es una plataforma en la nube de Microsoft. Puedes desplegar tu proyecto de Astro con el servicio de [Aplicaciones Web Estáticas](https://aka.ms/staticwebapps) de Microsoft. - -Esta guía te llevará a través del despliegue de tu sitio de Astro almacenado en GitHub usando Visual Studio Code. Por favor, consulta las guías de Microsoft para usar una [Tarea de Azure Pipelines](https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/reference/azure-static-web-app-v0?view=azure-pipelines) para otras configuraciones. - -## Prerrequisitos - -Para seguir esta guía necesitarás: - -- Una cuenta de Azure y una clave de subscripción. Puedes crear una [cuenta gratuita de Azure aquí](https://azure.microsoft.com/free). -- Subir el código de tu proyecto a [GitHub](https://github.com/). -- La [Extensión de SWA](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-azurestaticwebapps) en [Visual Studio Code](https://code.visualstudio.com/). - -## Cómo desplegar - - -1. Abre tu proyecto en VS Code. - -2. Abre la extensión de Aplicaciones Web Estáticas, inicia sesión en Azure, y haz clic en el botón de **+** para crear una nueva Aplicación Web Estática. Se te pedirá que designes la clave de subscripción a usar. - -3. Sigue el asistente iniciado por la extensión para darle a tu aplicación un nombre, seleccionar un framework preestablecido y designar la raíz de tu aplicación (usualmente `/`) y la ubicación de los archivos generados `/dist`. Astro no está enlistado en las plantillas integradas de Azure por lo que necesitarás elegir `custom`. El asistente creará y ejecutará una [GitHub Action](https://github.com/features/actions) en tu repositorio dentro del directorio `.github`. - - -La GitHub Action desplegará tu aplicación (puedes ver el progreso en la pestaña de Actions en GitHub). Cuando se complete con éxito, puedes ver tu aplicación en la dirección mostrada en la ventana de progreso de la Extensión de SWA haciendo clic en el botón de **Browse Website** (esto aparecerá después de que la GitHub Action se haya ejecutado). - -## Problemas Conocidos - -La acción yaml de GitHub que es creada automáticamente asume el uso de node 14. Esto significa que la compilación de Astro fallará. Para resolver esto actualiza el package.json de tus proyectos con este snippet. - -``` - "engines": { - "node": ">=18.0.0" - }, -``` - -## Recursos Oficiales - -- [Documentación de Microsoft Azure Static Web Apps](https://learn.microsoft.com/es-es/azure/static-web-apps/) - -## Recursos de la Comunidad - -- [Despliegue de un sitio web de Astro en Azure Static Web Apps](https://www.blueboxes.co.uk/deploying-an-astro-website-to-azure-static-web-apps) -- [Despliegue de un Sitio de Astro Estático en Azure Static Web Apps usando GitHub Actions](https://agramont.net/blog/create-static-site-astro-azure-ssg/#automate-deployment-with-github-actions) - diff --git a/src/content/docs/es/guides/deploy/netlify.mdx b/src/content/docs/es/guides/deploy/netlify.mdx deleted file mode 100644 index 8c97cc4f8fc9b..0000000000000 --- a/src/content/docs/es/guides/deploy/netlify.mdx +++ /dev/null @@ -1,141 +0,0 @@ ---- -title: Despliega tu proyecto de Astro en Netlify -description: Cómo desplegar tu proyecto de Astro usando Netlify. -type: deploy -i18nReady: true ---- -import ReadMore from '~/components/ReadMore.astro' - -[Netlify](https://netlify.com) ofrece servicios de alojamiento y servicios serverless para aplicaciones web y sitios estáticos. ¡Cualquier proyecto de Astro puede ser alojado en Netlify! - -Esta guía contiene instrucciones para hacer despliegues en Netlify a través de la interfaz web o la CLI de Netlify. - -## Configuración del Proyecto - -Tu proyecto de Astro puede ser desplegado en Netlify de tres maneras distintas: como un sitio estático, un sitio con renderizado en el servidor (SSR), o un sitio renderizado en _edge computing_. - -### Sitio Estático - -Tu proyecto de Astro es un sitio estático por defecto. No necesitas ninguna configuración adicional para desplegar un sitio estático de Astro en Netlify. - -### Adaptador para SSR - -Para habilitar SSR en tu proyecto de Astro y hacer un despliegue en Netlify, incluyendo el uso de funciones edge de Netlify: - -Añade [el adaptador de Netlify](/es/guides/integrations-guide/netlify/) a tu proyecto de Astro con el siguiente comando `astro add` que se muestra debajo. Este instalará el adaptador y hará los cambios apropiados a tu archivo `astro.config.mjs` en un solo paso. - -```bash -npx astro add netlify -``` - -Si prefieres instalar el adaptador manualmente, sigue los siguientes dos pasos: - -1. Añade [el adaptador de `@astrojs/netlify`](https://github.com/withastro/astro/tree/main/packages/integrations/netlify) a las dependencias de tu proyecto usando tu gestor de paquetes preferido. Si estás usando npm o no estás seguro, ejecuta esto en la terminal: - - ```bash - npm install @astrojs/netlify - ``` - -2. Añade dos nuevas lineas a tu archivo de configuración del proyecto `astro.config.mjs`. - - ```js title="astro.config.mjs" ins={2, 5-6} - import { defineConfig } from 'astro/config'; - import netlify from '@astrojs/netlify'; - - export default defineConfig({ - output: 'server', - adapter: netlify(), - }); - ``` - - También puedes desplegar tu proyecto usando las funciones edge de Netlify añadiendo `edgeMiddleware: true` a la configuración del adaptador de Netlify: - - ```diff lang="js" - // astro.config.mjs - import { defineConfig } from 'astro/config'; - import netlify from '@astrojs/netlify/functions'; - - export default defineConfig({ - output: 'server', - adapter: netlify({ - + edgeMiddleware: true - }), - }); - ``` - -## Cómo desplegar - -Puedes hacer despliegues en Netlify a través de la interfaz web o usando la CLI de Netlify (interfaz de línea de comandos). El proceso es el mismo para ambos sitios estáticos y sitios con SSR. - -### Despliegue con la Interfaz Web - -Si tu proyecto está alojado en GitHub, GitLab, BitBucket, o Azure DevOps, puedes usar la interfaz web de Netlify para desplegar tu proyecto de Astro. - -1. Haz click en Add a new site en tu [Netlify dashboard](https://app.netlify.com/) - -2. Selecciona Import an existing project - - Cuando importes tu proyecto de Astro desde tu proveedor de Git, Netlify debería detectarlo automáticamente y preconfigurar los ajustes correctos para ti. - -3. Asegúrate de que los siguientes ajustes sean ingresados, luego presiona el botón Deploy: - - - **Build Command:** `astro build` o `npm run build` - - **Publish directory:** `dist` - - Una vez desplegado, serás redirigido a la página de vista general. Ahí, puedes editar los detalles de tu sitio. - -Cualquier cambio futuro al repositorio de tu proyecto provocará despliegues de vista previa y producción basados en tu configuración de despliegue. - -#### Archivo `netlify.toml` - -Opcionalmente, puedes crear el archivo `netlify.toml` en la raíz del repositorio de tu proyecto para configurar tu comando de build y el directorio a publicar, así como otros ajustes del sitio, incluyendo variables de entorno y redirecciones. Netlify leerá este archivo y configurará de manera automática tu despliegue. - -Para configurar los ajustes por defecto, crea un archivo `netlify.toml` con la siguiente configuración: - -```toml -[build] - command = "npm run build" - publish = "dist" -``` - -Más información en [“Deploying an existing Astro Git repository”](https://www.netlify.com/blog/how-to-deploy-astro/#deploy-an-existing-git-repository-to-netlify) en el blog de Netlify - -### Despliegue con CLI - -También puedes crear un nuevo sitio en Netlify y vincularlo a tu repositorio de Git instalando y usando la [CLI de Netlify](https://cli.netlify.com/). - -1. Instala la CLI de Netlify de manera global - - ```bash - npm install --global netlify-cli - ``` - -2. Ejecuta `netlify login` y sigue las instrucciones para iniciar sesión y autorizar a Netlify -3. Ejecuta `netlify init` y sigue las instrucciones -4. Confirma tu comando de build (`astro build`) - - La CLI detectará automáticamente la configuración de build (`astro build`) y el directorio a desplegar (`dist`), y ofrecerá generar automáticamente [un archivo `netlify.toml`](#archivo-netlifytoml) con esos ajustes. - -5. Genera tu sitio y despliega enviando tus cambios a Git - - La CLI añadirá una deploy key al repositorio, lo que significa que tu sitio será generado automáticamente en Netlify cada vez que envíes tus cambios con `git push`. - -Más detalles de Netlify en [Deploy an Astro site using the Netlify CLI](https://www.netlify.com/blog/how-to-deploy-astro/#link-your-astro-project-and-deploy-using-the-netlify-cli) - -### Establece una Versión de Node.js - -Si estás usando una [build image](https://docs.netlify.com/configure-builds/get-started/#build-image-selection) antigua (Xenial) en Netlify, asegúrate que tu versión de Node.js esté configurada. Astro requiere `v18.17.1` o `v20.3.0` o mayor. - -Puedes [especificar tu versión de Node.js en Netlify](https://docs.netlify.com/configure-builds/manage-dependencies/#node-js-and-javascript) usando: -- Un archivo [`.nvmrc`](https://github.com/nvm-sh/nvm#nvmrc) en tu directorio raíz. -- Una variable de entorno `NODE_VERSION` en los ajustes de tu sitio utilizando el dashboard de Netlify. - -## Usando Netlify Functions - -No se necesita configuración adicional para usar Netlify Functions con Astro. ¡Añade un directorio `netlify/functions` a la raíz de tu proyecto y sigue [la documentación de Netlify Functions](https://docs.netlify.com/functions/overview/) para comenzar! - -## Ejemplos - -- [How to deploy an Astro site](https://www.netlify.com/blog/how-to-deploy-astro/) — Netlify Blog -- [Deploy An Astro site with Forms, Serverless Functions, and Redirects](https://www.netlify.com/blog/deploy-an-astro-site-with-forms-serverless-functions-and-redirects/) — Netlify Blog -- [Deployment Walkthrough Video](https://youtu.be/GrSLYq6ZTes) — Netlify YouTube channel diff --git a/src/content/docs/es/guides/deploy/render.mdx b/src/content/docs/es/guides/deploy/render.mdx deleted file mode 100644 index 90c0fae9ec628..0000000000000 --- a/src/content/docs/es/guides/deploy/render.mdx +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: Despliega tu proyecto de Astro en Render -description: Cómo desplegar tu proyecto de Astro en Render -type: deploy -i18nReady: true ---- -import { Steps } from '@astrojs/starlight/components'; - -Puedes desplegar tu proyecto de Astro en [Render](https://render.com/), un servicio para crear sitios web con certificados TLS gratuitos, una CDN global, protección DDoS, redes privadas y despliegues automáticos desde Git. - -## Cómo desplegar - - -1. Crea una [cuenta de render.com](https://dashboard.render.com/) e inicia sesión. - -2. Haz clic en el botón **New +** en el dashboard y selecciona **Static Site** - -3. Conecta tu repositorio de [GitHub](https://github.com/) o [GitLab](https://about.gitlab.com/) o, alternativamente, ingresa la URL pública del repositorio. - -4. Asigna un nombre a tu sitio web, selecciona la rama y especifica el comando de compilación y el directorio de publicación - - **build command:** `npm run build` - - **publish directory:** `dist`, para sitios estáticos; `dist/client` si estás usando los modos de renderizado `server` o `hybrid`. - - **Environment variables (advanced)**: Por defecto, Render usa Node.js 14.17.0, pero Astro [requiere una versión superior](/es/install-and-setup/#prerrequisitos). Añade una variable de entorno con una **Variable key** de `NODE_VERSION` y un **Value** de `v18.17.1` o `v20.3.0` o superior para indicarle a Render que use una versión compatible de Node.js. Alternativamente, añade un archivo [`.node-version`](https://render.com/docs/node-version) o [`.nvmrc`](https://render.com/docs/node-version) a tu proyecto para especificar una versión de Node.js. - -5. Haz clic en el botón **Create Static Site**. - diff --git a/src/content/docs/es/guides/deploy/sst.mdx b/src/content/docs/es/guides/deploy/sst.mdx deleted file mode 100644 index d095c1bac8450..0000000000000 --- a/src/content/docs/es/guides/deploy/sst.mdx +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: Despliega tu proyecto de Astro en AWS con SST -description: Cómo desplegar tu sitio Astro en AWS con SST -type: deploy -i18nReady: true ---- -import { Steps } from '@astrojs/starlight/components'; - -Puedes desplegar un proyecto de Astro usando [SST](https://sst.dev), un framework de código abierto para desplegar aplicaciones completamente serverless en AWS con soporte SSG y SSR. - -Además, puedes usar cualquier construcción SST adicional como Cron Jobs, Buckets, Queues, etc. mientras mantienes la seguridad de tipos. - -## Inicio rápido - - -1. Crea un proyecto de Astro. - -2. Ejecuta `npx create-sst`. - -3. Debería detectar que estás usando Astro y pedirte confirmación. - -4. Una vez que estés listo para el despliegue, puedes ejecutar `npx sst deploy --stage=production`. - - -También puedes ver [un vídeo tutorial de este proceso](https://www.youtube.com/watch?v=AFP3ZHxO7Gg) que te guiará a través de los pasos. - -### Constructs SST - -Para usar cualquier [construct SST](https://docs.sst.dev/) adicional, añádelos a tu `sst.config.ts`. - -```ts {2} {4} title="sst.config.ts" -app.stack(function Site(ctx) { - const bucket = new Bucket(ctx.stack, "public"); - const site = new AstroSite(ctx.stack, "site", { - bind: [bucket], - }); - - ctx.stack.addOutputs({ - url: site.url, - }); -}); -``` - -Y después accede a ellos en tu archivo `.astro`. - -```astro ---- -import { Bucket } from "sst/node/bucket" -console.log(Bucket.public.bucketName) ---- -``` - -Consulta la [documentación de Enlace de Recursos de SST](https://docs.sst.dev/resource-binding) para aprender más. - -Si tienes cualquier pregunta, puedes hacerla en el [Discord de SST](https://discord.gg/sst). diff --git a/src/content/docs/es/guides/deploy/stormkit.mdx b/src/content/docs/es/guides/deploy/stormkit.mdx deleted file mode 100644 index f5f90f2f78e06..0000000000000 --- a/src/content/docs/es/guides/deploy/stormkit.mdx +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: Despliega tu sitio de Astro en Stormkit -description: Despliega tu sitio de Astro en Stormkit -type: deploy -i18nReady: true ---- -import ReadMore from '~/components/ReadMore.astro'; -import { Steps } from '@astrojs/starlight/components'; - -Puedes desplegar tu proyecto de Astro en [Stormkit](https://stormkit.io/), una plataforma de despliegues para sitios web estáticos, aplicaciones de una página (SPAs) y funciones serverless. - -## ¿Cómo desplegar? - - -1. [Inicia sesión en Stormkit](https://app.stormkit.io/auth). - -2. Utilizando la interfaz de usuario, importa tu proyecto de Astro desde uno de los tres proveedores de Git admitidos (GitHub, GitLab o Bitbucket). - -3. Navega hasta el entorno de producción del proyecto en Stormkit o crea un nuevo entorno si es necesario. - -4. Verifica el comando de construcción en tu [configuración de Stormkit](https://stormkit.io/docs/deployments/configuration). Por defecto, Stormkit CI ejecutará `npm run build` pero puedes especificar un comando de construcción personalizado en esta página. - -5. Haz clic en el botón "Deploy Now" para desplegar tu sitio. - - -Lee más en la [Documentación de Stormkit](https://stormkit.io/docs). diff --git a/src/content/docs/es/guides/deploy/surge.mdx b/src/content/docs/es/guides/deploy/surge.mdx deleted file mode 100644 index 5aba5504941a6..0000000000000 --- a/src/content/docs/es/guides/deploy/surge.mdx +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: Despliega tu proyecto de Astro en Surge -description: Cómo desplegar tu proyecto de Astro usando surge.sh -type: deploy -i18nReady: true ---- -import { Steps } from '@astrojs/starlight/components'; - -Puedes desplegar tu proyecto de Astro en [Surge](https://surge.sh/), una plataforma diseñada para desarrolladores front-end para publicar sitios web usando solo un comando. - -## ¿Cómo desplegar? - - -1. Instala [la CLI de Surge](https://www.npmjs.com/package/surge) de forma global desde la Terminal, si aún no lo has hecho. - - ```shell - npm install -g surge - ``` - -2. Construye tu sitio de Astro desde el directorio raíz de tu proyecto. - - ```shell - npm run build - ``` - -3. Despliega en Surge usando la CLI. - - ```shell - surge dist - ``` - - Puedes usar un [dominio personalizado](http://surge.sh/help/adding-a-custom-domain) al hacer despliegues ejecutando `surge dist tudominio.com`. - \ No newline at end of file diff --git a/src/content/docs/es/guides/deploy/vercel.mdx b/src/content/docs/es/guides/deploy/vercel.mdx deleted file mode 100644 index a2909c93b6ecb..0000000000000 --- a/src/content/docs/es/guides/deploy/vercel.mdx +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: Despliega tu proyecto de Astro en Vercel -description: Cómo desplegar tu sitio de Astro en la web en Vercel. -type: deploy -i18nReady: true ---- -import ReadMore from '~/components/ReadMore.astro'; - -Puedes usar [Vercel](http://vercel.com/) para desplegar tu proyecto de Astro a su red global edge sin configuración adicional. - -Esta guía incluye instrucciones para desplegar tu proyecto en Vercel a través de la interfaz web o la línea de comandos (CLI) de Vercel. - -## Configuración del Proyecto - -Tu proyecto de Astro puede ser desplegado en Vercel como un sitio estático, o como un sitio renderizado en el servidor (SSR). - -### Sitio Estático - -Tu proyecto de Astro es un sitio estático por defecto. No necesitas ninguna configuración adicional para desplegar un sitio estático de Astro en Vercel. - -### Adaptador para SSR - -Para habilitar SSR en tu proyecto de Astro y desplegar en Vercel: - -Añade [el adaptador de Vercel](/es/guides/integrations-guide/vercel/) a tu proyecto de Astro con el siguiente comando `astro add` que se muestra debajo. Este instalará el adaptador y hará los cambios apropiados a tu archivo `astro.config.mjs` en un solo paso. - - -```bash -npx astro add vercel -``` - -Si prefieres instalar el adaptador manualmente, sigue los siguientes dos pasos: - -1. Añade [el adaptador de `@astrojs/vercel`](/es/guides/integrations-guide/vercel/) a las dependencias de tu proyecto usando tu gestor de paquetes preferido. Si estás usando npm o no estás seguro, ejecuta esto en la terminal: - - - ```bash - npm install @astrojs/vercel - ``` - -1. Añade dos líneas nuevas a tu archivo de configuración del proyecto `astro.config.mjs`. - - ```js title="astro.config.mjs" ins={2, 5-6} - import { defineConfig } from 'astro/config'; - import vercel from '@astrojs/vercel/serverless'; - - export default defineConfig({ - output: 'server', - adapter: vercel(), - }); - ``` - -## Cómo Desplegar - -Puedes desplegar en Vercel a través de la interfaz web o utilizando la interfaz de línea de comandos (CLI) de Vercel. El proceso es el mismo para sitios de Astro estáticos y SSR. - - -### Despliegue con Interfaz Web - -1. Envía tu código a un repositorio en remoto de Git (GitHub, GitLab, BitBucket). -2. [Importa tu proyecto](https://vercel.com/new) en Vercel. -3. Vercel detectará automáticamente Astro y establecerá la configuración necesaria. -4. ¡Tu aplicación está desplegada! (p. ej. [astro.vercel.app](https://astro.vercel.app/)) - -Una vez que tu proyecto ha sido importado y desplegado, todos los envíos subsecuentes en las ramas de git generarán [Preview Deployments](https://vercel.com/docs/concepts/deployments/preview--deployments), y todos los cambios hechos a la rama de producción (comúnmente “main”) resultarán en [Production Deployments](https://vercel.com/docs/concepts/deployments/environments#production). - -Aprende más sobre la [integración de Git de Vercel](https://vercel.com/docs/concepts/git). - - -### Despliegue a través del CLI - -1. Instala la [CLI de Vercel](https://vercel.com/cli) y ejecuta `vercel` para desplegar. - - ```bash - npm install -g vercel - vercel - ``` - -2. Vercel detectará automáticamente Astro y establecerá la configuración necesaria. -3. Cuando pregunte `Want to override the settings? [y/N]`, selecciona `N`. -4. ¡Tu aplicación está desplegada! (p. ej. [astro.vercel.app](https://astro.vercel.app/)) - -### Configuración con vercel.json - -Puedes usar `vercel.json` para sobrescribir el comportamiento predeterminado de Vercel y para configurar ajustes adicionales. Por ejemplo, es posible que desees adjuntar encabezados a las respuestas HTTP de tus despliegues. - -Aprende más sobre la [configuración de Vercel](https://vercel.com/docs/configuration). \ No newline at end of file diff --git a/src/content/docs/es/guides/deploy/zeabur.mdx b/src/content/docs/es/guides/deploy/zeabur.mdx deleted file mode 100644 index 5a47fa1260253..0000000000000 --- a/src/content/docs/es/guides/deploy/zeabur.mdx +++ /dev/null @@ -1,60 +0,0 @@ ---- -title: Despliega tu sitio de Astro en Zeabur -description: Cómo desplegar tu sitio de Astro en la web en Zeabur. -type: deploy -i18nReady: true ---- -import { Steps } from '@astrojs/starlight/components'; - -[Zeabur](https://zeabur.com) ofrece alojamiento para aplicaciones web full-stack. Los sitios Astro se pueden alojar tanto como SSR o salida estática. - -Esta guía incluye instrucciones para desplegar en Zeabur a través de la UI del sitio web. - -## Configuración de proyecto - -### Sitio estático - -Astro genera un sitio estático de forma predeterminada. No es necesario ninguna configuración adicional para desplegar un sitio Astro estático en Zeabur. - -### Adaptador para SSR - -Para habilitar SSR en tu proyecto de Astro y desplegar en Zeabur: - - -1. Instala [El adaptador `@zeabur/astro-adapter`](https://www.npmjs.com/package/@zeabur/astro-adapter) a las dependencias de tu proyecto utilizando tu gestor de paquetes preferido. Si estás utilizando npm o no estás seguro, ejecuta esto en la terminal: - - ```bash - npm install @zeabur/astro-adapter - ``` - -2. Agrega dos nuevas lineas en tu archivo de configuración de tu proyecto `astro.config.mjs`. - - ```js title="astro.config.mjs" ins={2, 5-6} - import { defineConfig } from 'astro/config'; - import zeabur from '@zeabur/astro-adapter/serverless'; - - export default defineConfig({ - output: 'server', - adapter: zeabur(), - }); - ``` - - -## ¿Cómo desplegar? - -Puedes desplegar tu sitio Astro en Zeabur si el proyecto está almacenado en GitHub. - - -1. Haz clic en Create new project en el [panel de Zeabur](https://dash.zeabur.com). - -2. Configura la instalación de GitHub e importa el repositorio. - -3. Zeabur detectará automáticamente que tu proyecto es un proyecto de Astro y lo construirá usando el comando `astro build`. - -4. Una vez que se complete la compilación, puedes vincular un dominio a tu sitio y visitarlo. - - -Después de que tu proyecto haya sido importado y desplegado, todas las siguientes confirmaciones a las ramas generarán nuevas compilaciones. - -Aprende más sobre la [Guía de despliegue](https://zeabur.com/docs/get-started/) de Zeabur. - diff --git a/src/content/docs/es/guides/deploy/zerops.mdx b/src/content/docs/es/guides/deploy/zerops.mdx deleted file mode 100644 index c1b07458fd75a..0000000000000 --- a/src/content/docs/es/guides/deploy/zerops.mdx +++ /dev/null @@ -1,233 +0,0 @@ ---- -title: Despliega tu sitio de Astro en Zerops -description: Cómo desplegar tu sitio de Astro en la web usando Zerops. -type: deploy -i18nReady: true ---- -import PackageManagerTabs from '~/components/tabs/PackageManagerTabs.astro' -import { Steps } from '@astrojs/starlight/components'; - -[Zerops](https://zerops.io/) es una plataforma en la nube centrada en el desarrollo que se puede utilizar para desplegar tanto un sitio Astro estático como SSR. - -Esta guía te guiará a través de la configuración y el despliegue de sitios Astro estáticos y SSR en Zerops. - -:::tip[Vista rápida de Astro x Zerops] - -¿Quieres probar Astro en Zerops sin instalar o configurar nada? Usando los repositorios [Zerops x Astro - Estático](https://github.com/zeropsio/recipe-astro-nodejs) o [Zerops x Astro - SSR en Node.js](https://github.com/zeropsio/recipe-astro-static) puedes desplegar un sitio de ejemplo de Astro con un solo clic. - -::: - -Ejecutar aplicaciones en Zerops requiere dos pasos:t -1. Crear un proyecto -2. Desencadenar el pipeline de compilación y despliegue - -:::note -Un proyecto de Zerops puede contener muchos sitios Astro. -::: - -## Sitio Astro estático en Zerops - -### Crear un proyecto y un servicio para Astro estático -Los proyectos y servicios se pueden añadir a través del asistente [`Project add`](https://app.zerops.io/dashboard/project-add) o importando una estructura yaml: - -```yaml -project: - name: recipe-astro -services: - - hostname: app - type: static -``` - -Esto creará un proyecto llamado `recipe-astro` con un servicio estático de Zerops llamado `app`. - -### Desplegar tu sitio Astro estático - -Para indicarle a Zerops cómo construir y ejecutar tu sitio, añade un archivo `zerops.yml` a tu repositorio: - - - - ```yaml title="zerops.yml" - # consulta https://docs.zerops.io/zerops-yml/specification para obtener la referencia completa - zerops: - - setup: app - build: - base: nodejs@20 - buildCommands: - - npm i - - npm build - deployFiles: - - dist/~ - run: - base: static - ``` - - - ```yaml title="zerops.yml" - # consulta https://docs.zerops.io/zerops-yml/specification para obtener la referencia completa - zerops: - - setup: app - build: - base: nodejs@20 - buildCommands: - - pnpm i - - pnpm build - deployFiles: - - dist/~ - run: - base: static - ``` - - - ```yaml title="zerops.yml" - # consulta https://docs.zerops.io/zerops-yml/specification para obtener la referencia completa - zerops: - - setup: app - build: - base: nodejs@20 - buildCommands: - - yarn - - yarn build - deployFiles: - - dist/~ - run: - base: static - ``` - - - -Ahora puedes [desencadenar el pipeline de construcción y despliegue usando la CLI de Zerops](#desencadenar-el-pipeline-usando-zerops-cli-zcli) o conectando el servicio `app` con tu repositorio de [GitHub](https://docs.zerops.io/references/github-integration/) / El repositorio de [GitLab](https://docs.zerops.io/references/gitlab-integration) desde dentro del detalle del servicio. - -## Sitio Astro SSR en Zerops - -### Crear un proyecto y un servicio para Astro SSR (Node.js) -Los proyectos y servicios se pueden añadir a través del asistente [`Project add`](https://app.zerops.io/dashboard/project-add) o importando una estructura yaml: - -```yaml -project: - name: recipe-astro -services: - - hostname: app - type: nodejs@20 -``` - -Esto creará un proyecto llamado `recipe-astro` con un servicio de Zerops Node.js llamado `app`. - -### Desplegar tu sitio Astro SSR - -Para indicarle a Zerops cómo construir y ejecutar tu sitio usando el [adaptador oficial de Astro Node.js](/es/guides/integrations-guide/node/) en modo `standalone`, añade un archivo `zerops.yml` a tu repositorio: - - - - ```yaml title="zerops.yml" - # consulta https://docs.zerops.io/zerops-yml/specification para obtener la referencia completa - zerops: - - setup: app - build: - base: nodejs@20 - buildCommands: - - npm i - - npm run build - deployFiles: - - dist - - package.json - - node_modules - run: - base: nodejs@20 - ports: - - port: 3000 - httpSupport: true - envVariables: - PORT: 3000 - HOST: 0.0.0.0 - start: npm start - ``` - - - ```yaml title="zerops.yml" - zerops: - # consulta https://docs.zerops.io/zerops-yml/specification para obtener la referencia completa - zerops: - - setup: app - build: - base: nodejs@20 - buildCommands: - - pnpm i - - pnpm run build - deployFiles: - - dist - - package.json - - node_modules - run: - base: nodejs@20 - ports: - - port: 3000 - httpSupport: true - envVariables: - PORT: 3000 - HOST: 0.0.0.0 - start: pnpm start - ``` - - - ```yaml title="zerops.yml" - # consulta https://docs.zerops.io/zerops-yml/specification para obtener la referencia completa - zerops: - - setup: app - build: - base: nodejs@20 - buildCommands: - - yarn - - yarn build - deployFiles: - - dist - - package.json - - node_modules - run: - base: nodejs@20 - ports: - - port: 3000 - httpSupport: true - envVariables: - PORT: 3000 - HOST: 0.0.0.0 - start: yarn start - ``` - - - -Ahora puedes [desencadenar el pipeline de construcción y despliegue usando la CLI de Zerops](#desencadenar-el-pipeline-usando-zerops-cli-zcli) o conectando el servicio `app` con tu repositorio de [GitHub](https://docs.zerops.io/references/github-integration/) / El repositorio de [GitLab](https://docs.zerops.io/references/gitlab-integration) desde dentro del detalle del servicio. - -## Desencadenar el pipeline usando Zerops CLI (zcli) - - -1. Instala la CLI de Zerops. - ```shell - # Para descargar el binario de zcli directamente, - # usa https://github.com/zeropsio/zcli/releases - npm i -g @zerops/zcli - ``` - -2. Abre [`Settings > Access Token Management`](https://app.zerops.io/settings/token-management) en la aplicación de Zerops y genera un nuevo token de acceso. - -3. Inicia sesión usando tu token de acceso con el siguiente comando: - ```shell - zcli login - ``` - -4. Navega a la raíz de tu aplicación (donde se encuentra `zerops.yml`) y ejecuta el siguiente comando para desencadenar el despliegue: - ```shell - zcli push - ``` - - -## Recursos -### Official - -- [Crear una cuenta de Zerops](https://app.zerops.io/registration) -- [Documentación de Zerops](https://docs.zerops.io) -- [Receta de Zerops Astro]https://app.zerops.io/recipe/astro) - -### Community -- [Desplegando Astro a Zerops en 3 minutos](https://medium.com/@arjunaditya/how-to-deploy-astro-to-zerops-4230816a62b4) -- [Desplegand Astro SSG con Node.js en Zerops con un solo clic](https://youtu.be/-4KTa4VWtBE) -- [Desplegando Astro SSR con Node.js en Zerops con un solo clic](https://youtu.be/eR6b_JnDH6g) diff --git a/src/content/docs/es/guides/dev-toolbar.mdx b/src/content/docs/es/guides/dev-toolbar.mdx deleted file mode 100644 index c4ea4653b11ee..0000000000000 --- a/src/content/docs/es/guides/dev-toolbar.mdx +++ /dev/null @@ -1,86 +0,0 @@ ---- -title: Barra de herramientas de desarrollo -description: Una guía para usar la barra de herramientas de desarrollo en Astro -i18nReady: true ---- -import RecipeLinks from "~/components/RecipeLinks.astro"; - -Mientras el servidor de desarrollo está en ejecución, Astro incluye una barra de herramientas de desarrollo en la parte inferior de cada página en tu vista previa local del navegador. - -Esta barra de herramientas incluye una serie de herramientas útiles para depurar e inspeccionar tu sitio durante el desarrollo y se puede [extender con más aplicaciones de la barra de herramientas de desarrollo](#extendiendo-la-barra-de-herramientas-de-desarrollo) que se encuentran en el directorio de integraciones. ¡Incluso puedes [construir tus propias aplicaciones de barra de herramientas](/es/recipes/making-toolbar-apps/) utilizando la [API de la barra de herramientas de desarrollo](/es/reference/dev-toolbar-app-reference/)! - -Esta barra de herramientas está habilitada de forma predeterminada y aparece cuando pasas el cursor por la parte inferior de la página. Es una herramienta de desarrollo solamente y no aparecerá en tu sitio publicado. - -## Aplicaciones integradas - -### Astro Menu - -La aplicación de Astro Menu proporciona un acceso fácil a varios datos sobre el proyecto actual y enlaces a recursos adicionales. En particular, proporciona acceso con un solo clic a la documentación de Astro, al repositorio de GitHub y al servidor de Discord. - -Esta aplicación también incluye un botón "Copy debug info" que ejecutará el comando [`astro info`](/es/reference/cli-reference/#astro-info) y copiará la salida al portapapeles. Esto puede ser útil al solicitar ayuda o informar problemas. - -### Inspect - -La aplicación Inspect proporciona información sobre cualquier [isla](/es/concepts/islands/) en la página actual. Esto te mostrará las propiedades pasadas a cada isla y la directiva del cliente que se está utilizando para renderizarlas. - -### Audit - -La aplicación Audit ejecuta automáticamente una serie de auditorías en la página actual, comprobando los problemas de rendimiento y accesibilidad más comunes. Cuando se encuentra un problema, aparecerá un punto rojo en la barra de herramientas. Al hacer clic en la aplicación, se mostrará una lista de resultados de la auditoría y se resaltarán los elementos relacionados directamente en la página. - -:::note -La auditoría básica de rendimiento y accesibilidad realizada por la barra de herramientas de desarrollo no reemplaza a herramientas dedicadas como [Pa11y](https://pa11y.org/) o [Lighthouse](https://developers.google.com/web/tools/lighthouse), o incluso mejor, ¡los humanos! - -La barra de herramientas de desarrollo tiene como objetivo proporcionar una forma rápida y sencilla de detectar problemas comunes durante el desarrollo, sin necesidad de cambiar de contexto a una herramienta diferente. -::: - -### Settings - -La aplicación Settings te permite configurar opciones para la barra de herramientas de desarrollo, como el registro detallado, deshabilitar notifaciones y ajustar su ubicación en tu pantalla. - -## Extendiendo la barra de herramientas de desarrollo - -Las integraciones de Astro pueden agregar nuevas aplicaciones a la barra de herramientas de desarrollo, lo que te permite extenderla con herramientas personalizadas específicas para tu proyecto. Puedes encontrar [más aplicaciones de herramientas de desarrollo para instalar en el directorio de integraciones](https://astro.build/integrations/?search=&categories%5B%5D=toolbar) o utilizando el [Menú de Astro](#astro-menu). - -Instala aplicaciones adicionales de la barra de herramientas de desarrollo en tu proyecto de la misma manera que cualquier otra [integración de Astro](/es/guides/integrations-guide/) según sus propias instrucciones de instalación. - - - -## Deshabilitar la barra de herramientas de desarrollo - -La barra de herramientas de desarrollo está habilitada de forma predeterminada para todos los sitios. Puedes elegir deshabilitarla para proyectos y/o usuarios individuales según sea necesario. - -### Por proyecto - -Para deshabilitar la barra de herramientas de desarrollo para todos los que trabajan en un proyecto, establece `devToolbar: false` en el [archivo de configuración de Astro](/es/reference/configuration-reference/). - -```js title="astro.config.mjs" ins={4-6} -import { defineConfig } from "astro/config"; - -export default defineConfig({ - devToolbar: { - enabled: false - } -}) -``` - -Para habilitar la barra de herramientas de desarrollo nuevamente, elimina estas líneas de tu configuración o establece `enabled:true`. - -### Por usuario - -Para deshabilitar la barra de herramientas de desarrollo para ti mismo en un proyecto específico, ejecuta el comando [`astro preferences`](/es/reference/cli-reference/#astro-preferences). - -```shell -astro preferences disable devToolbar -``` - -Para deshabilitar la barra de herramientas de desarrollo en todos los proyectos de Astro para un usuario en la máquina actual, agrega la bandera `--global` al ejecutar `astro-preferences`: - -```shell -astro preferences disable --global devToolbar -``` - -La barra de herramientas de desarrollo se puede habilitar más tarde con: - -```shell -astro preferences enable devToolbar -``` diff --git a/src/content/docs/es/guides/endpoints.mdx b/src/content/docs/es/guides/endpoints.mdx deleted file mode 100644 index 8ad78cf2fdee8..0000000000000 --- a/src/content/docs/es/guides/endpoints.mdx +++ /dev/null @@ -1,224 +0,0 @@ ---- -title: Endpoints -description: Aprende cómo crear endpoints que sirven cualquier tipo de dato -i18nReady: true ---- -import RecipeLinks from "~/components/RecipeLinks.astro"; - -Astro te permite crear endpoints personalizados para servir cualquier tipo de dato. Puedes usar esto para generar imágenes, exponer un documento RSS o usarlo como rutas API para construir una API completa para tu proyecto. - -En los sitios generados estáticamente, tus endpoints personalizados son llamados al momento de compilación para producir archivos estáticos. Si optaste para modo [SSR](/es/guides/on-demand-rendering/), los endpoints personalizados se convierten en endpoints de servidor que son llamados a petición. Endpoints estáticos y de tipo SSR son definidos similarmente, pero endpoints SSR soportan características adicionales. - -## Endpoints de Archivos Estáticos - -Para crear un endpoint personalizado, agrega un archivo `.js` o `.ts` al directorio de `/pages`. La extensión `.js` o `.ts` se eliminará durante el proceso de compilación, por lo que el nombre del archivo debe incluir la extensión de los datos que se desea generar. Por ejemplo, `src/pages/data.json.ts` generará el endpoint `/data.json`. - -Los endpoints exportan una función `GET` (opcionalmente `async`) que recibe un [objeto de contexto](/es/reference/api-reference/#contexto-del-endpoint) con propiedades similares a las de `Astro` global. Aquí, retorna un objeto Response con un `name` y una `url`, y Astro va a llamarlo al momento de compilación y usar sus contenidos del body para generar un archivo. - -```ts -// Ejemplo: src/pages/builtwith.json.ts -// Salidas: /builtwith.json -export async function GET({params, request}) { - return new Response( - JSON.stringify({ - url: 'https://astro.build/' - }) - ) -} -``` - -Desde Astro v3.0, el objeto `Response` devuelto ya no necesita incluir la propiedad `encoding`. Por ejemplo, para generar una imagen 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()); -}; -``` - -También puedes escribir tus funciones de endpoint usando el tipo de `APIRoute`: - -```ts -import type { APIRoute } from 'astro'; - -export const GET: APIRoute = async ({ params, request }) => {...} -``` - -### `params` y Enrutamiento Dinámico - -Los endpoints soportan las mismas características que hacen las páginas de [rutas dinámicas](/es/guides/routing/#rutas-dinámicas). Asigna un nombre a tu archivo con un nombre de parámetro entre corchetes y exporta una [función `getStaticPaths()`](/es/reference/api-reference/#getstaticpaths). Después, ya puedes acceder al parámetro usando la propiedad de `params` que fue pasado a la función del endpoint. - -```ts title="src/pages/api/[id].json.ts" -import type { APIRoute } from 'astro'; - -const usernames = ["Sarah", "Chris", "Dan", "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"} } - ] -}; -``` - -Esto te va a generar cuatro JSON endpoints al momento de compilación: `/api/0.json`, `/api/1.json`, `/api/2.json` y `/api/3.json`. El enrutamiento dinámico con endpoints funciona igual que con las páginas, pero debido a que el endpoint es una función y no un componente, las [props](/es/reference/api-reference/#transferencia-de-datos-con-props) no son compatibles. - -### `request` - -Todos los endpoints reciben una propiedad `request`, pero en el modo estático, solo tienes acceso a `request.url`. Esto retorna una URL completa del endpoint actual y funciona del mismo modo que [Astro.request.url](/es/reference/api-reference/#astrorequest) funciona con las páginas. - -```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 - }) - ) -} -``` - -## Endpoints del Servidor (Rutas de API) - -Todo lo descrito en la sección de endpoints de archivos estáticos también se puede usar en modo SSR: los archivos pueden exportar una función `get` que recibe un [objeto de contexto](/es/reference/api-reference/#contexto-del-endpoint) con propiedades similares a las de `Astro` global. - -Pero, a diferencia del modo `static`, cuando configuras el modo `server`, los endpoints se construirán cuando se soliciten. Esto desbloquea nuevas funciones que no están disponibles al momento de la compilación y permite crear rutas de API que escuchan solicitudes y ejecutan código de forma segura en el servidor en tiempo de ejecución. - -Tus rutas se renderizarán bajo demanda de forma predeterminada en el modo `server`. En el modo `hybrid`, debes optar por no pre-renderizar para cada endpoint personalizado con `export const prerender = false`. - - - -:::note -Asegúrate de [habilitar el modo de renderizado bajo demanda](/es/guides/on-demand-rendering/) antes de probar estos ejemplos y no optar por el prerenderizado en modo `hybrid`. -::: - -Los endpoints del servidor pueden acceder a `params` sin exportar `getStaticPaths`, y pueden retornar un objeto [`Response`](https://developer.mozilla.org/es/docs/Web/API/Response), lo que te permite establecer códigos de estado y encabezados: - -```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: 'No Encontrado' - }); - } - - return new Response( - JSON.stringify(product), { - status: 200, - headers: { - "Content-Type": "application/json" - } - } - ); -}; -``` - -Esto responderá a cualquier solicitud que coincida con la ruta dinámica. Por ejemplo, si navegamos a `/helmet.json`, `params.id` se establecerá en `helmet`. Si el `helmet` existe en la base de datos del producto simulado, el endpoint usará la creación del objeto `Response` para responder con JSON y devolver un [código de estado HTTP](https://developer.mozilla.org/es/docs/Web/API/Response/status) exitoso. Si no, utilizará un objeto `Response` para responder con un `404`. - -En modo SSR, ciertos proveedores requieren que el encabezado `Content-Type` devuelva una imagen. En este caso, usa un objeto `Response` para especificar una propiedad de `headers`. Por ejemplo, para producir una imagen binaria en formato `.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" }, - }); -} -``` - -### Métodos HTTP - -Además de la función `GET`, puedes exportar una función con el nombre de cualquier [método HTTP](https://developer.mozilla.org/es/docs/Web/HTTP/Methods). Cuando llega una solicitud, Astro verificará el método y llamará a la función correspondiente. - -También puedes exportar una función `ALL` para coincidir con cualquier método que no tenga una función correspondiente exportada. Si hay una solicitud sin método coincidente, se redirigirá a la [página 404 personalizada](/es/basics/astro-pages/#página-de-error-404-personalizada) de tu sitio. - -```ts title="src/pages/methods.json.ts" -export const GET: APIRoute = ({ params, request }) => { - return new Response(JSON.stringify({ - message: "¡Esto es un GET!" - }) - ) -} - -export const POST: APIRoute = ({ request }) => { - return new Response(JSON.stringify({ - message: "¡Esto es un POST!" - }) - ) -} - -export const DELETE: APIRoute = ({ request }) => { - return new Response(JSON.stringify({ - message: "¡Esto es un DELETE!" - }) - ) -} - -export const ALL: APIRoute = ({ request }) => { - return new Response(JSON.stringify({ - message: `¡Esto fue un ${request.method}!` - }) - ) -} -``` - - - -### `request` - -En modo SSR, la propiedad `request` retorna un objeto [`Request`](https://developer.mozilla.org/es/docs/Web/API/Request) totalmente utilizable que hace referencia a la solicitud actual. Esto permite aceptar datos y verificar encabezados: - -```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 nombre = body.nombre; - return new Response(JSON.stringify({ - message: "Tu nombre fue: " + nombre - }), { - status: 200 - }) - } - return new Response(null, { status: 400 }); -}; -``` - -### Redirecciones - -El contexto del endpoint exporta la utilidad `redirect()` similar 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: 'No encontrado' - }); - }; - - return redirect(link, 307); -}; -``` diff --git a/src/content/docs/es/guides/environment-variables.mdx b/src/content/docs/es/guides/environment-variables.mdx index e3f7fc0b90416..da01b123a45e8 100644 --- a/src/content/docs/es/guides/environment-variables.mdx +++ b/src/content/docs/es/guides/environment-variables.mdx @@ -27,7 +27,7 @@ PUBLIC_ANYBODY=ahí En este ejemplo, `PUBLIC_ANYBODY` (accesible mediante `import.meta.env.PUBLIC_ANYBODY`) estará disponible tanto en el servidor como el cliente, mientras que `SECRET_PASSWORD` (accesible mediante `import.meta.env.SECRET_PASSWORD`) estará disponible solo en el servidor. :::caution -Los archivos `.env` no son cargados dentro de [archivos de configuración](/es/guides/configuring-astro/#variables-de-entorno). +Los archivos `.env` no son cargados dentro de [archivos de configuración](#in-the-astro-config-file). ::: ### IntelliSense para TypeScript @@ -190,7 +190,7 @@ const data = await db(import.meta.env.DB_PASSWORD); const data = fetch(`${import.meta.env.PUBLIC_POKEAPI}/pokemon/squirtle`); ``` -Cuando se utiliza SSR, se puede acceder a las variables de entorno en tiempo de ejecución en función del adaptador SSR que se esté utilizando. Con la mayoría de los adaptadores puedes acceder a las variables de entorno con `process.env`, pero algunos adaptadores funcionan de forma diferente. Para el adaptador Deno, utilizará `Deno.env.get()`. Mira cómo [acceder al runtime de Cloudflare](/es/guides/integrations-guide/cloudflare/#tiempo-de-ejecución-de-cloudflare) para manejar las variables de entorno cuando utilices el adaptador de Cloudflare. Astro comprobará primero el entorno del servidor en busca de variables, y si no existen, Astro las buscará en los archivos .env. +Cuando se utiliza SSR, se puede acceder a las variables de entorno en tiempo de ejecución en función del adaptador SSR que se esté utilizando. Con la mayoría de los adaptadores puedes acceder a las variables de entorno con `process.env`, pero algunos adaptadores funcionan de forma diferente. Para el adaptador Deno, utilizará `Deno.env.get()`. Mira cómo [acceder al runtime de Cloudflare](/es/guides/integrations-guide/cloudflare/#cloudflare-runtime) para manejar las variables de entorno cuando utilices el adaptador de Cloudflare. Astro comprobará primero el entorno del servidor en busca de variables, y si no existen, Astro las buscará en los archivos .env. ## Variables de entorno con seguridad de tipos diff --git a/src/content/docs/es/guides/fonts.mdx b/src/content/docs/es/guides/fonts.mdx deleted file mode 100644 index 23ad797c42d70..0000000000000 --- a/src/content/docs/es/guides/fonts.mdx +++ /dev/null @@ -1,142 +0,0 @@ ---- -title: Usando fuentes personalizadas -description: >- - ¿Buscas agregar tipografías personalizadas a un proyecto de Astro? Usa Google - Fonts con Fontsource o añade una fuente a elección. -i18nReady: true ---- -import PackageManagerTabs from '~/components/tabs/PackageManagerTabs.astro'; -import { Steps } from '@astrojs/starlight/components' - - -Esta guía te mostrará cómo añadir fuentes web a tu proyecto y usarlas en tus componentes. - -## Usando un archivo de fuente local - -Este ejemplo demostrará cómo añadir una fuente personalizada usando el archivo de fuente `DistantGalaxy.woff`. - - -1. Añade tu archivo de fuente a la carpeta `public/fonts/`. -2. Agrega la siguiente declaración `@font-face` a tu CSS. Esto puede ser en un archivo `.css` global que importes, un bloque ` - ``` - - -## Usando Fontsource - -El proyecto [Fontsource](https://fontsource.org/) simplifica el uso de Google Fonts y otras fuentes de código abierto. Provee módulos npm que puedes instalar para las fuentes que desees utilizar. - - -1. Encuentra la fuente que quieras usar en el [catálogo de Fontsource](https://fontsource.org/). Este ejemplo usará [Twinkle Star](https://fontsource.org/fonts/twinkle-star). -2. Instala el paquete de la fuente que hayas elegido. - - - - ```shell - npm install @fontsource/twinkle-star - ``` - - - ```shell - pnpm add @fontsource/twinkle-star - ``` - - - ```shell - yarn add @fontsource/twinkle-star - ``` - - - - :::tip - Puedes encontrar el nombre correcto del paquete en la sección “Quick Installation” en la página de cada fuente en el sitio de Fontsource. Comienza con `@fontsource/` o `@fontsource-variable/` seguido del nombre de la fuente. - ::: - -3. Importa el paquete de la fuente en el componente donde quieras usar la fuente. Por lo general, querrás hacer esto en un componente de diseño común para asegurarte de que la fuente esté disponible en todo tu sitio. - - La importación añadirá las reglas de `@font-face` necesarias para configurar la fuente. - - ```astro title="src/layouts/BaseLayout.astro" - --- - import '@fontsource/twinkle-star'; - --- - ``` - -4. Usa el nombre de la fuente como se muestra en el ejemplo `body` en la página de Fontsource para el valor de `font-family`. Esto funcionará en cualquier lugar donde puedas escribir CSS en tu proyecto de Astro. - - ```css - h1 { - font-family: "Twinkle Star", cursive; - } - ``` - - -Para optimizar los tiempos de renderizado de tu sitio web, puede que quieras precargar las fuentes que son esenciales para la visualización inicial de la página. -Consulta la [guía de Fontsource para precargar fuentes](https://fontsource.org/docs/getting-started/preload) para obtener más información y uso. - -## Registrando fuentes con Tailwind - -Si estás usando la [integración de Tailwind](/es/guides/integrations-guide/tailwind/), puedes usar cualquiera de los métodos anteriores en esta página para instalar tu fuente, con algunas modificaciones. Puedes añadir una [declaración`@font-face` para una fuente local](#usando-un-archivo-de-fuente-local) o usar [la estrategia `import` de Fontsource](#usando-fontsource) para instalar tu fuente. - -Para registrar tu fuente en Tailwind: - - -1. Sigue los pasos de las guías anteriores, pero deja sin completar el paso final sobre agregar una `font-family` en tu CSS. - -2. Agrega el nombre de la tipografía en `tailwind.config.mjs`. - - Este ejemplo agrega `Inter` al conjunto de tipografías sans-serif, junto con fuentes de respaldo predeterminadas por 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: [], - } - ``` - - Ahora, todos los textos sans-serif (estilo por defecto en Tailwind) de tu proyecto utilizarán tu fuente elegida y la clase `font-sans` también aplicará la fuente Inter. - - -Revisa [la documentación de Tailwind para agregar fuentes personalizadas](https://tailwindcss.com/docs/font-family#using-custom-values) para más información. - - -## Más recursos - -- Aprende como las fuentes web funcionan en la [guía de fuentes web de MDN](https://developer.mozilla.org/es/docs/Learn/CSS/Styling_text/Web_fonts). -- Genera CSS para tu fuente con [el generador de fuentes web de Font Squirrel](https://www.fontsquirrel.com/tools/webfont-generator). diff --git a/src/content/docs/es/guides/framework-components.mdx b/src/content/docs/es/guides/framework-components.mdx deleted file mode 100644 index f373d7e696397..0000000000000 --- a/src/content/docs/es/guides/framework-components.mdx +++ /dev/null @@ -1,243 +0,0 @@ ---- -title: Componentes de otros frameworks -description: 'Aprenda a usar React, Svelte, etc.' -i18nReady: true ---- -import IntegrationsNav from '~/components/IntegrationsNav.astro' -import ReadMore from '~/components/ReadMore.astro' - -Crea tu página web en Astro sin sacrificar tus componentes de framework favoritos. Crea [islas](/es/concepts/islands/) con el framework UI de tu elección. - -## Integraciones oficiales de frameworks UI - -Astro admite una variedad de frameworks populares, incluidos [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/) y [Lit](https://lit.dev/) con integraciones oficiales. - -Encuentra aún más [integraciones de frameworks mantenidas por la comunidad](https://astro.build/integrations/?search=&categories%5B%5D=frameworks) (por ejemplo, Angular, Qwik, Elm) en nuestro directorio de integraciones. - - - -## Instalando integraciones - -Una o varias de estas integraciones de Astro se pueden instalar y configurar en tu proyecto. - -Consulta la [Guía de integraciones](/es/guides/integrations-guide/) para obtener más detalles sobre la instalación y configuración de las integraciones de Astro. - -:::tip -¿Quieres ver un ejemplo para el framework de tu elección? Visita [astro.new](https://astro.new/latest/frameworks) y selecciona una de las plantillas de framework. -::: - -## Usando componente de framework - -¡Usa los componentes de tu framework JavaScript en tus páginas de Astro, diseños y componentes al igual que los componentes de Astro! Todos sus componentes pueden vivir juntos en `/src/components`, o pueden organizarse de la manera que desee. - -Para usar un componente de framework, importalo desde su ruta relativa en el script de tu componente Astro. Luego, usa el componente junto con otros componentes, elementos HTML y expresiones JSX-like en la plantilla del componente. - -```astro title="src/pages/static-components.astro" ins={2,7} ---- -import MyReactComponent from '../components/MyReactComponent.jsx'; ---- - - -

¡Usa componentes de React directamente en Astro!

- - - -``` - -Por defecto, tus componentes de framework solo se renderizarán en el servidor, como HTML estático. Esto es útil para crear componentes de maquetado que no son interactivos y evitar enviar código JavaScript innecesario al cliente. - -## Hidratando componentes interactivos - -Un componente de framework puede hacerse interactivo (hidratado) usando una de las [directivas `client:*`](/es/reference/directives-reference/#directivas-del-cliente). Estos son atributos del componente que derminan cuando tu componente de JavaScript debería ser enviado al navegador. - -Con todas las directivas de cliente excepto `client:only`, tu componente se renderizará primero en el servidor para generar el HTML estático. El código JavaScript se mandará al navegador de acuerdo con la directiva que hayas escogido. De esta forma el componente se hidratará y se volverá interactivo. - -```astro title="src/pages/interactive-components.astro" /client:\S+/ ---- -// Ejemplo: hidratando los componentes de framework en el navegador. -import InteractiveButton from '../components/InteractiveButton.jsx'; -import InteractiveCounter from '../components/InteractiveCounter.jsx'; -import InteractiveModal from '../components/InteractiveModal.svelte'; ---- - - - - - - - - -``` - -:::caution -El framework de JavaScript (React, Svelte, etc.) necesario para renderizar el componente será enviado al navegador junto con el código JavaScript del componente. Si dos o más componentes en una página usan el mismo framework, el framework solo se mandará una vez. -::: - -:::note[Accesibilidad] -La mayoría de los patrones de accesibilidad específicos de cada framework deberían funcionar cuando estos componentes se usan en Astro. ¡Asegúrate de elegir una directiva de cliente que asegure que cualquier JavaScript relacionado con la accesibilidad se cargue y ejecute correctamente en el momento adecuado! -::: - -### Directivas de hidratación disponibles - -Hay varias directivas de hidratación disponibles para los componentes de framework: `client:load`, `client:idle`, `client:visible`, `client:media={QUERY}` y `client:only={FRAMEWORK}`. - -Consulta nuestra página de [referencia de directivas](/es/reference/directives-reference/#directivas-del-cliente) para obtener una descripción completa de las directivas de hidratación y sus usos. - -## Mezclando frameworks - -Puedes importar y renderizar componentes usando múltiples frameworks en el mismo componente de Astro. - -```astro title="src/pages/mixing-frameworks.astro" ---- -// Ejemplo: Mezclando múltiples componentes del framework en la misma página. -import MyReactComponent from '../components/MyReactComponent.jsx'; -import MySvelteComponent from '../components/MySvelteComponent.svelte'; -import MyVueComponent from '../components/MyVueComponent.vue'; ---- -
- - - -
-``` - -:::caution -Solo los componentes de **Astro** (`.astro`) pueden contener componentes de múltiples frameworks. -::: - -## Pasando props al componente de framework - -Puedes pasar props desde componentes de Astro a tus componentes de framework: - -```astro title="src/pages/frameworks-props.astro" ---- -import TodoList from '../componentes/TodoList.jsx'; -import Counter from '../components/Counter.svelte'; ---- -
- - -
-``` - -:::caution[Pasando funciones como props] -Puedes pasar una función como prop a un componente de framework, pero este solo funcionará al renderizar el componente en el servidor. Si intentas usar la función en un componente hidratado (por ejemplo, como un evento), se producirá un error. - -Esto es porque las funciones no pueden ser _serializadas_ (transferidas desde el servidor al cliente) por Astro. - - -## Pasando children a componentes de framework - -Dentro de un componente de Astro, **puedes** pasar elementos children a los componentes del framework. Cada framework tiene sus propios patrones sobre cómo hacer referencia a estos elementos children: React, Preact y Solid usan una prop especial llamada `children`, mientras que Svelte y Vue usan el elemento ``. - -```astro title="src/pages/component-children.astro" {5} ---- -import MyReactSidebar from '../components/MyReactSidebar.jsx'; ---- - -

Aquí hay una barra lateral con texto y un botón.

-
-``` - -Además, puedes usar [slots con nombre](/es/basics/astro-components/#slots-con-nombre) para agrupar hijos específicos. - -Para React, Preact y Solid, estos slots se convertirán en una prop de nivel superior. Los slots con nombres que usen `kebab-case` se convertirán a `camelCase`. - -```astro title="src/pages/named-slots.astro" /slot="(.*)"/ ---- -import MySidebar from '../components/MySidebar.jsx'; ---- - -

Menu

-

Aquí hay una barra lateral con texto y un botón.

- -
-``` - -```jsx /{props.(title|socialLinks)}/ -// src/components/MySidebar.jsx -export default function MySidebar(props) { - return ( - - ) -} -``` - -Para Svelte y Vue, puedes hacer referencia a estos slots mediante un elemento `` con el atributo `name`. Se conservarán los nombres de los slots que usen `kebab-case`. - -```jsx /slot name="(.*)"/ -// src/components/MySidebar.svelte - -``` - -## Anidando componentes de framework - -Dentro de un archivo Astro, los children de los componentes de framework también pueden ser componentes hidratados. Esto significa que puedes anidar recursivamente componentes en cualquiera de estos frameworks. - -```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'; ---- - - -

Aquí hay una barra lateral con texto y un botón.

-
- - -
- -
-``` - -:::caution -Recuerda: los propios archivos de los componentes de framework (por ejemplo, `.jsx`, `.svelte`) no pueden combinar varios frameworks. -::: - -Esto te permite crear "aplicaciones" completas usando tu framework de JavaScript preferido y renderizarlas, a través de un componente principal, en una página de Astro. - -:::note -Los componentes de Astro siempre se renderizan a HTML estático, incluso cuando incluyen componentes de framework que son hidratados. Esto significa que solo se pueden pasar props que no hacen ninguna renderización a HTML. Pasar "render props" de React a componentes del framework desde un componente de Astro no funcionará, porque los componentes de Astro no pueden proporcionar el renderizado que este patrón requiere. En su lugar, utiliza slots con nombre. -::: - -## ¿Puedo usar componentes de Astro dentro de mis componentes de framework? - -Cualquier componente de framework se convierte en una "isla" de ese framework. Estos componentes deben escribirse en su totalidad como código válido para ese framework, utilizando solo sus propios imports y paquetes. No puedes importar componentes `.astro` en un componente de framework (por ejemplo, `.jsx` o `.svelte`). - -Sin embargo, puedes usar el patrón [Astro ``](/es/basics/astro-components/#slots) para pasar el contenido estático generado por los componentes de Astro como elementos secundarios a los componentes de framework **dentro de un Componente `.astro`**. - -```astro title="src/pages/astro-children.astro" {6} ---- -import MyReactComponent from '../components/MyReactComponent.jsx'; -import MyAstroComponent from '../components/MyAstroComponent.astro'; ---- - - - -``` - -## ¿Puedo hidratar los componentes de Astro? - -Si intentas hidratar un componente Astro con un modificador `client:`, obtendrás un error. - -Los [componentes de Astro](/es/basics/astro-components/) son componentes de maquetado únicamente en HTML sin ninguna ejecución del lado del cliente. Pero puedes usar una etiqueta ` - -Un cielo estrellado. - -``` - -#### Pasando el componente Image - -El componente ``, al igual que cualquier otro componente de Astro, **no está disponible para los componentes de frameworks UI**. - -Sin embargo, puedes pasar el contenido estático generado por `` a un componente de framework dentro de un archivo `.astro` como hijos o utilizando un [`` nombrado](/es/guides/framework-components/#puedo-usar-componentes-de-astro-dentro-de-mis-componentes-de-framework): - - -```astro title="ImageWrapper.astro" ---- -import ReactComponent from './ReactComponent.jsx'; -import { Image } from 'astro:assets'; -import stars from '~/stars/docline.png'; ---- - - - Un cielo estrellado. - -``` - -## Generando imágenes con `getImage()` - -:::caution -`getImage()` se basa en APIs solo para el servidor y provoca errores en la compilación cuando se utiliza en el lado del cliente. -::: - -La función `getImage()` está destinada a generar imágenes que se utilizarán en otro lugar que no sea directamente en HTML, por ejemplo, en una [Ruta API](/es/guides/endpoints/#endpoints-del-servidor-rutas-de-api). También te permite crear tu propio componente `` personalizado. - - - -`getImage()` recibe un objeto de opciones con las [mismas propiedades que el componente Image](#propiedades) (excepto `alt`). - -```astro ---- -import { getImage } from "astro:assets"; -import myBackground from "../background.png"; - -const optimizedBackground = await getImage({src: myBackground, format: 'webp'}); ---- - -
-``` - -Devuelve un objeto con las siguientes propiedades: - -```js -{ - rawOptions: {...}, // Parámetros originales transmitidos - options: {...}, // Parámetros validados transmitidos - src: "...", // Ruta a la imagen generada - srcSet: { - values: [...], // Valores generados para srcset, cada entrada tiene una url y un descriptor de tamaño - attribute: "", // Atributo srcset generado a partir de los valores - } - attributes: {...} // Atributos HTML adicionales necesarios para representar la imagen (anchura, altura, estilo, etc.) -} -``` - -## Texto Alt - -No todos los usuarios pueden ver las imágenes de la misma manera, por lo que la accesibilidad es una preocupación especialmente importante al utilizar imágenes. Utiliza el atributo `alt` para proporcionar [texto alternativo descriptivo](https://www.w3.org/WAI/tutorials/images/) para las imágenes. - -Este atributo es requerido tanto para los componentes `` como ``. Si no se proporciona texto alternativo, se mostrará un mensaje de error útil recordándote incluir el atributo `alt`. - -Si la imagen es meramente decorativa (es decir, no contribuye a la comprensión de la página), establece `alt=""` para que los lectores de pantalla sepan que deben ignorar la imagen. - -## Servicio de imágenes por defecto - -[Sharp](https://github.com/lovell/sharp) es el servicio de imágenes por defecto utilizado para `astro:assets`. Puedes configurar aún más el servicio de imágenes utilizando la opción [`image.service`](/es/reference/configuration-reference/#imageservice). - -:::note -Cuando se utiliza un [administrador de paquetes estricto](https://pnpm.io/pnpm-vs-npm#npms-flat-tree) como `pnpm`, es posible que debas instalar manualmente Sharp en tu proyecto, aunque sea una dependencia de Astro: - -```bash -pnpm add sharp -``` -::: - -### Configura Squoosh - -Si prefieres utilizar [Squoosh](https://github.com/GoogleChromeLabs/squoosh) para transformar tus imágenes, actualiza tu configuración con lo siguiente: - -```js title="astro.config.mjs" ins={4-6} -import { defineConfig, squooshImageService } from 'astro/config'; - -export default defineConfig({ - image: { - service: squooshImageService(), - }, -}); -``` - -### Configura el servicio no-op de paso - -Si tu [adaptador para el modo `server` o `hybrid`](https://astro.build/integrations/?search=&categories%5B%5D=adapters) no admite la optimización de imágenes integrada de Astro con Squoosh y Sharp (por ejemplo, Deno, Cloudflare), puedes configurar un servicio de imágenes sin acción para permitirte utilizar los componentes `` y ``. Ten en cuenta que Astro no realiza ninguna transformación ni procesamiento de imágenes en estos entornos. Sin embargo, aún puedes disfrutar de otros beneficios de usar `astro:assets`, como la ausencia de Desplazamiento Acumulativo de Diseño (CLS), el atributo `alt` obligatorio y una experiencia de autoría coherente. - -Configura el servicio `passthroughImageService()` para evitar el procesamiento de imágenes de Squoosh y Sharp: - -```js title="astro.config.mjs" ins={4-6} "passthroughImageService" -import { defineConfig, passthroughImageService } from 'astro/config'; - -export default defineConfig({ - image: { - service: passthroughImageService() - } -}); -``` - -## Integraciones comunitarias - -Existen varias [integraciones de imágenes de la comunidad](https://astro.build/integrations?search=images) de terceros para optimizar y trabajar con imágenes en tu proyecto de Astro. - -## Actualizar a v3.0 desde v2.x - -`astro:assets` ya no está detrás de una bandera experimental en Astro v3.0. - -`` es ahora un componente integrado y se ha eliminado la integración anterior `@astrojs/image`. - -Estos y otros cambios relacionados con el uso de imágenes en Astro pueden causar algunos cambios disruptivos al actualizar tu proyecto de Astro de una versión anterior. - -Sigue las instrucciones a continuación según corresponda para actualizar un proyecto de Astro v2.x a v3.0. - -### Actualizar desde `experimental.assets` - -Si habías habilitado previamente la bandera experimental para `astro:assets`, deberás actualizar tu proyecto para Astro v3.0, que ahora incluye las características de assets de forma predeterminada. - -#### Eliminar la bandera `experimental.assets` - -Elimina la bandera experimental: - -```js title="astro.config.mjs" del={4-6} -import { defineConfig } from 'astro/config'; - -export default defineConfig({ - experimental: { - assets: true - } -}); -``` - -Si es necesario, también actualiza tu archivo `src/env.d.ts` para reemplazar la referencia `astro/client-image` por `astro/client`: - -```ts title="src/env.d.ts" del={1} ins={2} -/// -/// -``` - -#### Eliminar el alias de importación `~/assets` - -Este alias de importación ya no se incluye por defecto con `astro:assets`. Si estabas usando este alias con assets experimentales, debes convertirlos a rutas de archivo relativas o [crear tus propios alias de importación](/es/guides/imports/#alias). - -```astro title="src/pages/posts/post-1.astro" del={2} ins={3} ---- -import rocket from '~/assets/rocket.png'; -import rocket from '../../assets/rocket.png'; ---- -``` - -#### Agrega soporte sencillo para assets en Cloudflare, Deno, Vercel Edge y Netlify Edge - - Astro v3.0 permite que `astro:assets` funcione sin errores en Cloudflare, Deno, Vercel Edge y Netlify Edge, que no admiten la optimización de imágenes integrada de Astro con Squoosh y Sharp. Ten en cuenta que Astro no realiza ninguna transformación ni procesamiento de imágenes en estos entornos. Sin embargo, aún puedes disfrutar de otros beneficios de usar `astro:assets`, como la ausencia de Desplazamiento Acumulativo de Diseño (CLS), el atributo `alt` obligatorio y una experiencia de autoría coherente. - - Si antes evitaste usar `astro:assets` debido a estas limitaciones, ahora puedes usarlo sin problemas. Puedes configurar el servicio de imágenes sin acción para optar explícitamente por este comportamiento: - -```js title="astro.config.mjs" ins={4-8} -import { defineConfig } from 'astro/config'; - -export default defineConfig({ - image: { - service: { - entrypoint: 'astro/assets/services/noop' - } - } -}); -``` - -### Decide dónde almacenar tus imágenes - -Consulta la guía de Imágenes para ayudarte a decidir [dónde almacenar tus imágenes](#dónde-guardar-las-imágenes). Es posible que desees aprovechar las nuevas opciones para almacenar tus imágenes con la flexibilidad adicional que `astro:assets` ofrece. Por ejemplo, las imágenes relativas desde la carpeta `src/` de tu proyecto ahora pueden ser referenciadas en Markdown, MDX y Markdoc utilizando la sintaxis estándar de Markdown `![alt](src)`. - -### Actualiza las etiquetas existentes `` - -Anteriormente, importar una imagen devolvía un `string` con la ruta de la imagen. Los assets de imagen importados coinciden con la siguiente firma: - -```ts -interface ImageMetadata { - src: string; - width: number; - height: number; - format: string; -} -``` - -Debes actualizar el atributo `src` de cualquier etiqueta `` existente (incluyendo cualquier [imagen en componentes de frameworks UI](#imágenes-en-componentes-de-frameworks-ui)) y también puedes actualizar otros atributos que ahora están disponibles para ti a partir de la imagen importada. - -```astro title="src/components/MyComponent.astro" ".src" ".width" ".height" del={4} ins={6} ---- -import rocket from '../images/rocket.svg'; ---- -Un cohete en el espacio. - -Un cohete en el espacio. -``` - -### Actualiza tus archivos Markdown, MDX y Markdoc - -Las imágenes relativas desde la carpeta `src/` de tu proyecto ahora pueden ser referenciadas en Markdown, MDX y Markdoc utilizando la sintaxis estándar de Markdown `![alt](src)`. - -Esto te permite mover tus imágenes desde el directorio `public/` a la carpeta `src/` de tu proyecto, donde ahora serán procesadas y optimizadas. Tus imágenes existentes en `public/` y las imágenes remotas siguen siendo válidas, pero no son optimizadas por el proceso de compilación de Astro. - -```md title="src/pages/posts/post-1.md" "/_astro" ".hash" "../../assets/" -# Mi página Markdown - - -![Un cielo estrellado](../../images/stars.png) - - -![Un cielo estrellado](./stars.png) -``` - -Si necesitas más control sobre los atributos de tu imagen, te recomendamos usar el formato de archivo `.mdx`, que te permite incluir el componente `` de Astro o una etiqueta JSX `` además de la sintaxis Markdown. Utiliza la [integración de MDX](/es/guides/integrations-guide/mdx/) para agregar soporte para MDX a Astro. - -### Elimina `@astrojs/image` - -Si estabas utilizando la integración de imágenes en Astro v2.x, completa los siguientes pasos: - -1. Elimina la integración `@astrojs/image`. - - Debes [eliminar la integración](/es/guides/integrations-guide/#eliminando-una-integración) desinstalándola y luego eliminándola de tu archivo `astro.config.mjs`. - - ```js del={3,7} - // astro.config.mjs - import { defineConfig } from 'astro/config'; - import image from '@astrojs/image'; - - export default defineConfig({ - integrations: [ - image(), - ] - }) - ``` - -2. Actualiza los tipos (si es necesario). - - Si tenías tipos especiales configurados para `@astrojs/image` en `src/env.d.ts`, es posible que necesites cambiarlos de nuevo a los tipos predeterminados de Astro si la actualización a la versión 3 no completó este paso por ti. - - ```ts title="src/env.d.ts" del={1} ins={2} - /// - /// - ``` - - Del mismo modo, actualiza `tsconfig.json` si es necesario: - - ```json title="tsconfig.json" del={3} ins={4} - { - "compilerOptions": { - "types": ["@astrojs/image/client"] - "types": ["astro/client"] - } - } - ``` - -3. Migra cualquier componente `` existente. - - Cambia todas las declaraciones de `import` de `@astrojs/image/components` a `astro:assets` para poder usar el nuevo componente integrado ``. - - Elimina cualquier atributo del componente que no sean [propiedades de assets de imagen actualmente admitidas](/es/guides/images/#propiedades). - - Por ejemplo, `aspectRatio` ya no es compatible, ya que ahora se infiere automáticamente a partir de los atributos `width` y `height`. - - ```astro title="src/components/MyComponent.astro" del= {2,11} ins={3} - --- - import { Image } from '@astrojs/image/components'; - import { Image } from 'astro:assets'; - import localImage from '../assets/logo.png'; - const localAlt = 'El logo de Astro'; - --- - - {localAlt} - ``` - -4. Elige un servicio de imágenes predeterminado. - - [Sharp](https://github.com/lovell/sharp) es ahora el servicio de imágenes predeterminado utilizado para `astro:assets`. Si deseas utilizar Sharp, no se requiere ninguna configuración. - - Si prefieres utilizar [Squoosh](https://github.com/GoogleChromeLabs/squoosh) para transformar tus imágenes, actualiza tu configuración con la siguiente opción `image.service`: - - ```js title="astro.config.mjs" ins={4-6} - import { defineConfig, squooshImageService } from 'astro/config'; - - export default defineConfig({ - image: { - service: squooshImageService(), - }, - }); - ``` - - -### Actualiza los esquemas de Colecciones de Contenido - -Ahora puedes declarar una imagen asociada para una entrada de colecciones de contenido, como la imagen de portada de una entrada de blog, en tu metadatos usando su ruta relativa a la carpeta actual. - -El nuevo helper `image` para colecciones de contenido te permite validar los metadatos de la imagen utilizando Zod. Aprende más sobre [cómo usar imágenes en colecciones de contenido](/es/guides/images/#imágenes-en-colecciones-de-contenido) - -### Navegando por las importaciones de imágenes en Astro v3.0 - -En Astro v3.0, si tienes que conservar el antiguo comportamiento de importación para las imágenes y requieres una representación de tipo string de la URL de la imagen, añade `?url` al final de la ruta de la imagen al importarla. Por ejemplo: - -```astro title="src/pages/blog/MyImages.astro" ---- -import Sprite from '../assets/logo.svg?url'; ---- - - - -``` - -Este enfoque garantiza que obtengas el string URL. Ten en cuenta que durante el desarrollo, Astro utiliza una ruta `src/`, pero al compilar, genera rutas hash como `/_astro/cat.a6737dd3.png`. - -Si prefieres trabajar directamente con el objeto de imagen, puedes acceder a la propiedad `.src`. Este enfoque es el mejor para tareas como la gestión de las dimensiones de la imagen para las métricas de Core Web Vitals y la prevención de CLS. - -Si estás en transición al nuevo comportamiento de importación, combinar `?url` y `.src` puede ser el método adecuado para el manejo de imágenes sin problemas. diff --git a/src/content/docs/es/guides/imports.mdx b/src/content/docs/es/guides/imports.mdx deleted file mode 100644 index 4256f8073f358..0000000000000 --- a/src/content/docs/es/guides/imports.mdx +++ /dev/null @@ -1,285 +0,0 @@ ---- -title: Recursos estáticos -description: Aprende a importar diferentes tipos de contenido con Astro. -i18nReady: true ---- -import ReadMore from '~/components/ReadMore.astro' -import RecipeLinks from "~/components/RecipeLinks.astro"; - -Astro es compatible con la mayoría de los recursos estáticos sin necesidad de configuración. Puedes usar `import` en cualquier lugar de tu proyecto (incluido el script de frontmatter de Astro) y Astro incluirá una copia optimizada de ese recurso estático en la compilación final. `@import` también es compatible dentro del CSS y ` -``` - - Similarmente, en Astro puedes poner en una etiqueta ` -``` - -#### Estilo global - -Las etiquetas ` -``` - - - -#### Soporte de preprocesadores - -[Astro admite los preprocedaores de CSS más populares](/es/guides/styling/#preprocesadores-css) instalandolos como una dependencia de desarrollo. Por ejemplo, para usar SCSS: - - -```shell -npm install -D sass -``` - -Después de hacerlo, puedes usar estilos `.scss` o `.sass` sin modificación desde tus componentes Vue. - -```astro title="src/layouts/Layout.astro" -

Hello, world

- -``` - -Ve más sobre [Estilos en Astro](/es/guides/styling/). - -### Plugin de imagen de Nuxt a Astro - -Convierte cualquier [componente `` or `` de Nuxt](https://image.nuxtjs.org/components/nuxt-img) al [componente de imagen propio de Astro](/es/guides/images/#image--astroassets) en archivos `.astro` o `.mdx`, o al tag estándar [``](/es/guides/images/#imágenes-en-componentes-de-frameworks-ui) o `` de HTML según corresponda en tus componentes de Vue. - -El componente `` de Astro funciona solo en archivos `.astro` y `.mdx`. Consulta una [lista completa de sus atributos de componente](/es/guides/images/#propiedades) y ten en cuenta que varios serán diferentes de los atributos de Nuxt. - -```astro title="src/pages/index.astro" ---- -import { Image } from 'astro:assets'; -import rocket from '../assets/rocket.png'; ---- -Un cohete en el espacio. -Un cohete en el espacio. -``` - -En los componentes Vue (`.vue`) dentro de tu aplicación Astro, usa la sintaxis de imagen JSX estándar (``). Astro no optimizará estas imágenes, pero puedes instalar y usar paquetes NPM para tener más flexibilidad. - -Puedes aprender más sobre [el uso de imágenes en Astro](/es/guides/images/) en la guía de imágenes. - -## Ejemplo guiado: ¡Mira los pasos! - -Aquí hay un ejemplo de la obtención de datos de un Pokédex hecho con Nuxt migrado a Astro. - -`pages/index.vue` obtiene y muestra una lista de los primeros 151 Pokémon usando [la REST PokéAPI](https://pokeapi.co/). - - -Aquí está cómo recrearlo en `src/pages/index.astro`, reemplazando `asyncData()` con `fetch()`. - -1. Identifica las etiquetas `