@astrojs/ vercel
Este adaptador permite a Astro desplegar tu sitio renderizado en modo hybrid
o server
a Vercel.
Si utilizas Astro como un generador de sitios estáticos, no necesitas un adaptador.
Aprende a desplegar tu sitio de Astro consultando nuestra guía de despliegue en Vercel.
¿Por qué Astro Vercel?
Sección titulada ¿Por qué Astro Vercel?Vercel es una plataforma de despliegue que te permite alojar tu proyecto conectándote directamente a tu repositorio de GitHub. Este adaptador ajusta el proceso de compilación de Astro para preparar tu proyecto para el despliegue a través de Vercel.
Instalación
Sección titulada InstalaciónAstro incluye el comando astro add
para automatizar la instalación de integraciones oficiales. Si lo prefieres, puedes instalar las integraciones manualmente.
Agrega el adaptador Vercel para habilitar SSR en tu proyecto de Astro con el siguiente comando astro add
. Esto instalará @astrojs/vercel
y hará los cambios apropiados en tu archivo astro.config.mjs
en un solo paso.
Instalación manual
Sección titulada Instalación manualEn primer lugar, añade el adaptador @astrojs/vercel
a las dependencias de tu proyecto utilizando tu gestor de paquetes preferido:
A continuación, añade el adaptador y el modo de renderizado bajo demanda que deseas a tu archivo astro.config.*
:
Objetivos
Sección titulada ObjetivosPuedes desplegar en diferentes objetivos:
serverless
: SSR dentro de una función Node.js.static
: genera un sitio estático siguiendo los formatos de salida, redirecciones, etc. de Vercel.
Puedes cambiar el destino modificando la importación:
Puedes desplegar por CLI (vercel deploy
) o conectando tu nuevo repositorio en el Panel de Vercel. Alternativamente, puedes crear un build de producción localmente:
Configuración
Sección titulada ConfiguraciónPara configurar este adaptador, pasa un objeto a la invocación de función vercel()
en astro.config.mjs
:
webAnalytics
Sección titulada webAnalyticsTipo: VercelWebAnalyticsConfig
Disponible para: Serverless, Static
@astrojs/vercel@3.8.0
Puedes habilitar Vercel Analytics (incluyendo Web Vitals y Audiences) configurando webAnalytics: { enabled: true }
. Esto inyectará los scripts de seguimiento de Vercel en todas tus páginas.
imagesConfig
Sección titulada imagesConfigTipo: VercelImageConfig
Disponible para: Serverless, Static
@astrojs/vercel@3.3.0
Opciones de configuración para la API de Optimización de Imágenes de Vercel. Consulta la documentación de configuración de imágenes de Vercel para obtener una lista completa de los parámetros admitidos.
Las propiedades domains
y remotePatterns
se llenarán automáticamente utilizando la configuración correspondiente de image
en Astro.
imageService
Sección titulada imageServiceTipo: boolean
Disponible para: Serverless y Static
@astrojs/vercel@3.3.0
Cuando está habilitado, se configurará y utilizará automáticamente un Servicio de Imágenes impulsado por la API de Optimización de Imágenes de Vercel en producción. En desarrollo, el servicio de imágenes especificado por devImageService
se utilizará en su lugar.
devImageService
Sección titulada devImageServiceTipo: 'sharp' | 'squoosh' | string
Disponible para: Serverless, Static
@astrojs/vercel@3.8.0
Por defecto: sharp
Te permite configurar qué servicio de imágenes usar en desarrollo cuando imageService está habilitado. Esto puede ser útil si no puedes instalar las dependencias de Sharp en tu máquina de desarrollo, pero usar otro servicio de imágenes como Squoosh te permitiría previsualizar imágenes en tu entorno de desarrollo. La compilación no se ve afectada y siempre usará la Optimización de Imágenes de Vercel.
También puede establecerse en cualquier valor arbitrario para usar un servicio de imágenes personalizado en lugar de los integrados en Astro.
Tipo: boolean | VercelISRConfig
Disponible para: Serverless
@astrojs/vercel@7.2.0
Por defecto: false
Permite desplegar tu proyecto como una función de ISR (Regeneración Estática Incremental), que almacena en caché tus páginas renderizadas bajo demanda de la misma manera que las páginas prerenderizadas después de la primera solicitud.
Para habilitar esta característica, establece isr
en true
en la configuración del adaptador de Vercel en astro.config.mjs
:
Toma en cuenta que las solicitudes de funciones ISR no incluyen parámetros de búsqueda, similar a las solicitudes en modo estático.
Invalidación de caché de ISR
Sección titulada Invalidación de caché de ISRPor defecto, una función ISR se almacena en caché durante la duración de tu despliegue. Puedes controlar aún más el almacenamiento en caché configurando un tiempo de expiración, o excluyendo rutas particulares del almacenamiento en caché por completo.
Invalidación basada en el tiempo
Sección titulada Invalidación basada en el tiempoPuedes cambiar la duración del tiempo para almacenar en caché rutas configurando un valor de expiration
en segundos:
Excluir rutas del almacenamiento en caché
Sección titulada Excluir rutas del almacenamiento en cachéPara implementar el modo borrador de Vercel, o Regeneración Estática Incremental bajo demanda (ISR), puedes crear un token de bypass y proporcionarlo a la configuración isr
junto con cualquier ruta para excluir del almacenamiento en caché:
includeFiles
Sección titulada includeFilesTipo: string[]
Disponible para: Serverless
Usa esta propiedad para forzar a que los archivos se incluyan en el empaquetado de tu función. Esto es útil cuando notas que faltan archivos.
excludeFiles
Sección titulada excludeFilesTipo: string[]
Disponible para: Serverless
Utiliza esta propiedad para excluir cualquier archivo del proceso de empaquetado que de otra manera se incluiría.
maxDuration
Sección titulada maxDurationTipo: number
Disponible para: Serverless
Usa esta propiedad para extender o limitar la duración máxima (en segundos) que pueden ejecutarse las funciones sin servidor antes de agotar el tiempo de espera. Consulta la documentación de Vercel para conocer el límite predeterminado y máximo para el plan de tu cuenta.
Configuración de agrupación de funciones
Sección titulada Configuración de agrupación de funcionesEl adaptador de Vercel combina todas tus rutas en una única función por defecto.
También tienes la opción de dividir las compilaciones en una función separada para cada ruta usando la opción functionPerRoute
. Esto reduce el tamaño de cada función, lo que significa que es menos probable que excedas el límite de tamaño para una función individual. Además, el código se inicia más rápido.
Verifica que tu plan de Vercel incluya un número adecuado de funciones antes de habilitar functionPerRoute
. Por ejemplo, el nivel gratuito de Vercel limita cada despliegue a no más de 12 funciones. Si tu plan de Vercel es insuficiente para el número de rutas en tu proyecto, recibirás un mensaje de error durante el despliegue.
Middleware de Vercel Edge
Sección titulada Middleware de Vercel EdgePuedes usar el middleware de Vercel Edge para interceptar una solicitud y redirigirla antes de enviar una respuesta. El middleware de Vercel puede ejecutarse para despliegues de Edge, SSR y estáticos.
Es posible que no necesites instalar este paquete para tu middleware. @vercel/edge
solo es necesario para usar algunas características del middleware, como la geolocalización. Para obtener más información, consulta la documentación del middleware de Vercel.
-
Agrega un archivo
middleware.js
en la raíz de tu proyecto: -
Mientras desarrollas localmente, puedes ejecutar
vercel dev
para ejecutar el middleware. En producción, Vercel lo manejará por ti.
¿Intentando reescribir? Actualmente, reescribir una solicitud con middleware solo funciona para archivos estáticos.
Ejecutar el middleware de Astro en funciones de Vercel Edge
Sección titulada Ejecutar el middleware de Astro en funciones de Vercel EdgeEl adaptador @astrojs/vercel/serverless
puede crear una función edge a partir de un middleware de Astro en tu base de código. Cuando edgeMiddleware
está habilitado, una función edge ejecutará tu código de middleware para todas las solicitudes, incluyendo activos estáticos, páginas prerrenderizadas y páginas renderizadas bajo demanda.
Para páginas renderizadas bajo demanda, el objeto context.locals
se serializa usando JSON y se envía en un encabezado para la función serverless, que realiza la renderización. Como medida de seguridad, la función serverless se negará a servir solicitudes con una respuesta 403 Forbidden
a menos que provengan de la función edge generada.
Esta es una característica opcional. Para habilitarla, establece edgeMiddleware
en true
:
Opcionalmente, puedes crear un archivo reconocido por el adaptador llamado vercel-edge-middleware.(js|ts)
en la carpeta srcDir
para crear Astro.locals
.
Escribir requiere el paquete @vercel/edge
Si usas TypeScript, puedes escribir la función de la siguiente manera:
La información devuelta por esta función se pasará al middleware de Astro.
La función:
- debe exportar una función predeterminada;
- debe regresar un
object
; - acepta un objeto con una
request
ycontext
como propiedades; request
es tipada comoRequest
;context
es tipado comoRequestContext
;
Limitaciones y restricciones
Sección titulada Limitaciones y restriccionesCuando optes por esta característica, hay algunas restricciones a tener en cuenta:
- El middleware de Vercel Edge será siempre la primera función en recibir la
Request
y la última función en recibir laResponse
. Esta es una restricción arquitectónica que sigue los límites establecidos por Vercel. - Solo
request
ycontext
se pueden usar para producir un objetoAstro.locals
. Las operaciones como redireccionamientos, etc. deben delegarse al middleware de Astro. Astro.locals
debe ser serializable. Si no lo haces, se producirá un error de runtime. Esto significa que no puedes almacenar tipos complejos comoMap
,function
,Set
, etc.
Soporte de versiones de Node.js
Sección titulada Soporte de versiones de Node.jsEl adaptador @astrojs/vercel
admite versiones específicas de Node.js para desplegar tu proyecto de Astro en Vercel. Para ver las versiones de Node.js admitidas en Vercel, haz clic en la pestaña de configuración de un proyecto y desplázate hacia abajo hasta la sección “Versión de Node.js”.
Consulta la documentación de Vercel para obtener más información.