Migrando desde NuxtJS
Aquí hay algunos conceptos clave y estragias de migración para ayudarte a comenzar. ¡Usa el resto de nuestra documentación y nuestra comunidad de Discord para continuar!
Esta guía se refiere a Nuxt 2, no a la nueva versión Nuxt 3. Si bien algunos de los conceptos son similares, Nuxt 3 es una versión más nueva del framework y puede requerir estrategias diferentes para partes de tu migración.
Principales similitudes entre Nuxt y Astro
Sección titulada Principales similitudes entre Nuxt y AstroNuxt y Astro comparten algunas similitudes que te ayudarán a migrar tu proyecto:
- Los proyectos de Astro también pueden ser SSG o SSR con prerenderizado a nivel de página.
- Astro usa un enrutamiento basado en archivos y permite que las páginas con nombres creen rutas dinámicas
- Astro es basado en componentes y la estructura de tu marcado será similar antes y después de tu migración.
- Astro tiene una integración oficial para usar componentes de Vue.
- Astro tiene soporte para instalar paquetes de NPM, incluyendo librerías de Vue. Puedes mantener algunos o todos tus componentes y dependencias de Vue existentes.
Principales diferencias entre Nuxt y Astro
Sección titulada Principales diferencias entre Nuxt y AstroCuando reconstruyas tu sitio Nuxt en Astro, notarás algunas diferencias importantes:
-
Nuxt es una SPA basada en Vue (aplicación de una sola página). Los sitios de Astro son aplicaciones multipágina construidas usando componentes
.astro
, pero también pueden admitir React, Preact, Vue.js, Svelte, SolidJS, AlpineJS, Lit y plantillas HTML sin procesar. -
Enrutamiento de Página: Nuxt usa
vue-router
para el enrutamiento SPA, yvue-meta
para administrar<head>
. En Astro, crearás rutas de página HTML separadas y controlarás tu<head>
directamente o en un componente plantilla. -
Orientado al contenido: Astro fue diseñado para mostrar tu contenido y permitirte optar por la interactividad solo cuando sea necesario. Una aplicación Nuxt existente puede estar construida para una alta interactividad del lado del cliente. Astro tiene capacidades incorporadas para trabajar con tu contenido, como la generación de páginas, pero puede requerir técnicas avanzadas de Astro para incluir elementos que son más difíciles de replicar usando componentes
.astro
, como los paneles de control.
Migrar tu proyecto de NuxtJS
Sección titulada Migrar tu proyecto de NuxtJSCada migración de proyecto se verá diferente, pero hay algunas acciones comunes que realizarás al convertir de Nuxt a Astro.
Crea un nuevo proyecto Astro
Sección titulada Crea un nuevo proyecto AstroUtiliza el comando create astro
en tu gestor de paquetes para lanzar el asistente de linea de comandos de Astro o elige un tema de la comunidad del catálogo de temas de Astro.
Puedes pasar un argumento --template
al comando create astro
para iniciar un nuevo proyecto Astro con uno de nuestros ejemplos oficiales (por ejemplo, docs
, blog
, portfolio
). O, puedes iniciar un nuevo proyecto desde cualquier repositorio Astro existente en GitHub.
Luego, copia tus archivos de proyecto Nuxt existentes a tu nuevo proyecto Astro en una carpeta separada fuera de src
.
Visita https://astro.new para ver la lista completa de plantillas de inicio oficiales y enlaces para abrir un nuevo proyecto en StackBlitz, CodeSandbox o Gitpod.
Instalar integraciones (opcional)
Sección titulada Instalar integraciones (opcional)Puede resultarte útil instalar algunas de las integraciones opcionales de Astro para usar mientras estes migrando tu proyecto de Nuxt a Astro:
-
@astrojs/vue: para reutilizar algunos componentes de interfaz de usuario Vue existentes en tu nuevo sitio Astro, o seguir escribiendo con componentes Vue.
-
@astrojs/mdx: para traer archivos MDX existentes de tu proyecto Nuxt, o para usar MDX en tu nuevo sitio Astro.
Coloca tu código fuente en src
Sección titulada Coloca tu código fuente en src-
Mueve el contenido de la carpeta
static/
de Nuxt apublic/
.Astro usa el directorio
public/
para los activos estáticos, similar a la carpetastatic/
de Nuxt. -
Copia o mueve los otros archivos y carpetas de Nuxt (por ejemplo,
pages
,layouts
, etc.) a la carpetasrc/
de Astro.Como Nuxt, la carpeta
src/pages/
de Astro es una carpeta especial utilizada para el enrutamiento basado en archivos. Todas las demás carpetas son opcionales, y puedes organizar el contenido de tu carpetasrc/
de la forma que desees. Otras carpetas comunes en los proyectos Astro incluyensrc/layouts/
,src/components
,src/styles
,src/scripts
.
Convertir páginas Vue SFC a archivos .astro
Sección titulada Convertir páginas Vue SFC a archivos .astroAqui hay algunos consejos para convertir un componente .vue
de Nuxt en un componente .astro
:
-
Usa la etiqueta
<template>
de la función de componente NuxtJS existente como base para tu plantilla HTML. -
Cambia cualquier sintaxis de Nuxt o Vue a Astro o a los estándares web de HTML. Esto incluye
<NextLink>
,:class
,{{variable}}
, yv-if
, por ejemplo. -
Mueve la etiqueta
<script>
de JavaScript, a un “valla de código” (---
). Convierte las propiedades de recuperación de datos de tu componente a JavaScript del lado del servidor - ver la obtención de datos de Nuxt en Astro. -
Utiliza
Astro.props
para acceder a cualquier prop adicional que se pasaba anteriormente a tu componente Vue. -
Decide si algún componente importado también necesita ser convertido a Astro. Con la integración oficial instalada, puedes usar componentes Vue existentes en tu archivo Astro. Pero, es posible que desees convertirlos a Astro, ¡especialmente si no necesitan ser interactivos!
Mira un ejemplo de una aplicación Nuxt convertida paso a paso.
Comparar: Vue vs Astro
Sección titulada Comparar: Vue vs AstroCompara el siguiente componente de Nuxt con un componente de Astro:
Migrando Archivos de Diseño
Sección titulada Migrando Archivos de DiseñoPuede resultarte útil comenzar convirtiendo tus diseños y plantillas de Nuxt en componentes de diseño de Astro.
Cada página de Astro requiere explícitamente que las etiquetas <html>
, <head>
y <body>
estén presentes. Tu layout.vue
y plantillas de Nuxt no incluirán estas.
Ten en cuenta la plantilla HTML estándar y el acceso directo a <head>
:
También puede que desees reutilizar el código de la propiedad head
de la página de Nuxt para incluir metadatos adicionales del sitio. Ten en cuenta que Astro no usa ni vue-meta
ni la propiedad head
de un componente, sino que crea <head>
directamente. Puedes importar y usar componentes, incluso dentro de <head>
, para separar y organizar el contenido de tu página.
Migrando Páginas y Publicaciones
Sección titulada Migrando Páginas y PublicacionesEn NuxtJS, tus páginas viven en /pages
. En Astro, todo el contenido de tu página debe vivir dentro de src/pages
o src/content
.
Páginas de Vue
Sección titulada Páginas de VueTus páginas Vue existentes (.vue
) de Nuxt deberán convertirse de archivos Vue a páginas .astro
. No puedes usar un archivo de página Vue existente en Astro.
Estas páginas .astro
deben estar ubicadas dentro de src/pages/
y tendrán rutas de página generadas automáticamente en función de su ruta de archivo.
Nombres de ruta de archivo dinámico
Sección titulada Nombres de ruta de archivo dinámicoEn Nuxt, tus páginas dinámicas usan un guión bajo para representar una propiedad de página dinámica que luego se pasa a la generación de la página:
Directorypages/
Directorypokemon/
- _name.vue
- index.vue
- nuxt.config.js
Para convertir a Astro, cambia esta propiedad de ruta dinámica subrayada (por ejemplo, _name.vue
) para que esté envuelta en un par de corchetes (por ejemplo, [name].astro
):
Directorysrc/
Directorypages/
Directorypokemon/
- [name].astro
- index.astro
- astro.config.mjs
Páginas de Markdown y MDX
Sección titulada Páginas de Markdown y MDXAstro tiene soporte incorporado para Markdown y una integración opcional para archivos MDX. Puedes reutilizar cualquier página Markdown y MDX existente, pero puede que requieran algunos ajustes en tu frontmatter, como agregar la propiedad especial layout
del frontmatter de Astro.
Ya no necesitarás crear manualmente páginas para cada ruta generada por Markdown o usar un paquete externo como @nuxt/content
. Estos archivos se pueden colocar dentro de src/pages/
para aprovechar el enrutamiento automático basado en archivos.
Cuando forma parte de una colección de contenido, los archivos Markdown y MDX vivirán en carpetas dentro de src/content/
y generarás esas páginas dinámicamente.
Migrando Tests
Sección titulada Migrando TestsComo Astro genera HTML sin procesar, es posible escribir tests end-to-end utilizando la salida del paso de compilación. Cualquier test end-to-end escrito anteriormente podría funcionar de inmediato, si has podido hacer coincidir el marcado de tu sitio Nuxt. Las bibliotecas de pruebas como Jest y Vue Testing Library se pueden importar y usar en Astro para probar tus componentes Vue.
Ver más en la guía de pruebas de Astro.
Referencia: Convertir la sintaxis de NuxtJS a Astro
Sección titulada Referencia: Convertir la sintaxis de NuxtJS a AstroVariables locales de Nuxt a Astro
Sección titulada Variables locales de Nuxt a AstroPara usar variables locales en un componente de Astro HTML, cambia el conjunto de dos llaves a un conjunto de llaves:
Pasar propiedades de Nuxt a Astro
Sección titulada Pasar propiedades de Nuxt a AstroPara vincular un atributo o una propiedad de componente en un componente de Astro, cambia la sintaxis a la siguiente:
Enlaces de Nuxt a Astro
Sección titulada Enlaces de Nuxt a AstroConvierte cualquiere componente <NuxtLink to="">
de Nuxt a etiquetas HTML <a href="">
.
Astro no usa ningún componente especial para los enlaces, aunque puedes crear componentes de enlace personalizados. Luego puedes importar y usar este <Link>
como lo harías con cualquier otro componente.
Importaciones de Nuxt a Astro
Sección titulada Importaciones de Nuxt a AstroSi es necesario, actualiza cualquier importación de archivo para hacer referencia exacta a las rutas de archivo relativas. Esto se puede hacer usando alias de importación o escribiendo una ruta relativa completa.
Ten en cuenta que .astro
y varios otros tipos de archivo deben importarse con su extensión de archivo completa.
Generación de páginas dinámicas de Nuxt a Astro
Sección titulada Generación de páginas dinámicas de Nuxt a AstroEn Nuxt, para generar una página dinámica, debes:
- Usar renderizado del lado del servidor (SSR).
- Usar la función
generate
ennuxt.config.js
para definir todas las rutas estáticas posibles.
En astro, similarmente tienes dos opciones:
- Usar renderizado del lado del servidor (SSR).
- Exporta una función
getStaticPaths()
en el frontmatter de una página de Astro para indicarle al framework qué rutas estáticas generar dinámicamente.
Convertir una función generate
en Nuxt a una función getStaticPaths
en Astro.
Sección titulada Convertir una función generate en Nuxt a una función getStaticPaths en Astro.Para generar varias páginas, reemplaza la función para crear rutas en tu nuxt.config.js
con getStaticPaths()
directamente dentro de una página de enrutamiento dinámico:
Obtención de datos de Nuxt a Astro
Sección titulada Obtención de datos de Nuxt a AstroNuxt tiene dos métodos para obtener datos del lado del servidor:
En Astro, obtén datos dentro de la valla de código de tu página.
Migra lo siguiente:
Para una valla de código sin una función de envoltura:
Nuxt Styling to Astro
Sección titulada Nuxt Styling to AstroNuxt utiliza el estilo de los componentes de Vue para generar el estilo de una página.
Similarmente, en Astro puedes poner en una etiqueta <style>
en la plantilla de tu página para proporcionar estilos con alcance al componente.
Estilo global
Sección titulada Estilo globalLas etiquetas <style>
son scoped
(delimitadas) de forma predeterminada en Astro. Para hacer que una etiqueta <style>
sea global, márcala con el atributo is:global
:
Soporte de preprocesadores
Sección titulada Soporte de preprocesadoresAstro admite los preprocedaores de CSS más populares instalandolos como una dependencia de desarrollo. Por ejemplo, para usar SCSS:
Después de hacerlo, puedes usar estilos .scss
o .sass
sin modificación desde tus componentes Vue.
Ve más sobre Estilos en Astro.
Plugin de imagen de Nuxt a Astro
Sección titulada Plugin de imagen de Nuxt a AstroConvierte cualquier componente <nuxt-img/>
or <nuxt-picture/>
de Nuxt al componente de imagen propio de Astro en archivos .astro
o .mdx
, o al tag estándar <img>
o <picture>
de HTML según corresponda en tus componentes de Vue.
El componente <Image />
de Astro funciona solo en archivos .astro
y .mdx
. Consulta una lista completa de sus atributos de componente y ten en cuenta que varios serán diferentes de los atributos de Nuxt.
En los componentes Vue (.vue
) dentro de tu aplicación Astro, usa la sintaxis de imagen JSX estándar (<img />
). 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 en la guía de imágenes.
Ejemplo guiado: ¡Mira los pasos!
Sección titulada 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.
Aquí está cómo recrearlo en src/pages/index.astro
, reemplazando asyncData()
con fetch()
.
-
Identifica las etiquetas
<template>
y<style>
en el SFC de Vue. -
Crea
src/pages/index.astro
Usa las etiquetas
<template>
y<style>
del SFC de Nuxt. Convierte cualquier sintaxis de Nuxt o Vue a Astro.Ten en cuenta que:
-
la etiqueta
<template>
es eliminada -
la etiqueta
<style>
tiene su atributoscoped
eliminado -
v-for
se convierte en.map
. -
:attr="val"
se convierte enattr={val}
-
la etiqueta
<NuxtLink>
se convierte en<a>
. -
El fragmento
<> </>
no es requerido en la plantilla de Astro.
-
-
Agrega cualquier importación, propiedad y JavaScript necesario
Ten en cuenta que:
- La función
asyncData
no es necesaria. Los datos de la API se obtienen directamente en la valla de código. - Un componente
<Layout>
es importado y envuelve la plantilla de la página.- Nuestro método
head()
de Nuxt se pasa al componente<Layout>
, que se pasa al elemento<title>
como propiedad.
- Nuestro método
- La función
Recursos de la comunidad
Sección titulada Recursos de la comunidad- Artículo de Blog: De Nuxt a Astro - reconstruyendo con Astro
- Artículo de Blog: Cambio de plataforma de Nuxt 2 a Astro 3 - de configuración a producción