Migration depuis NuxtJS
Voici quelques concepts clés et stratégies de migration pour vous aider à démarrer. Utilisez le reste de notre documentation et notre communauté sur Discord pour continuer !
Ce guide fait référence à Nuxt 2, et non au plus récent Nuxt 3. Bien que certains des concepts soient similaires, Nuxt 3 est une version plus récente du framework et peut nécessiter des stratégies différentes pour certaines parties de votre migration.
Principales similitudes entre Nuxt et Astro
Section intitulée « Principales similitudes entre Nuxt et Astro »Nuxt et Astro partagent certaines similitudes qui vous aideront à migrer votre projet :
- Les projets Astro peuvent également être de type SSG ou SSR avec prérendu au niveau de la page.
- Astro utilise le routage basé sur des fichiers et permet à des pages spécialement nommées de créer des routes dynamiques.
- Astro est basé sur les composants, et votre structure de balisage sera similaire avant et après votre migration.
- Astro possède une intégration officielle pour utiliser les composants Vue.
- Astro prend en charge l’installation de paquets NPM, y compris les bibliothèques Vue. Vous pourrez peut-être conserver certains ou tous vos composants et dépendances Vue existants.
Principales différences entre Nuxt et Astro
Section intitulée « Principales différences entre Nuxt et Astro »Lorsque vous recréez votre site Nuxt dans Astro, vous remarquerez quelques différences importantes :
-
Nuxt est une application monopage (SPA) basée sur Vue. Les sites Astro sont des applications multipages créées à l’aide de composants
.astro, mais ils peuvent également prendre en charge React, Preact, Vue.js, Svelte, SolidJS, AlpineJS et des modèles HTML bruts. -
Routage des pages : Nuxt utilise
vue-routerpour le routage SPA etvue-metapour gérer<head>. Dans Astro, vous créerez des routes distinctes pour vos pages HTML et vous contrôlerez le contenu de la balise<head>directement dans votre page ou dans un composant de mise en page. -
Axé sur le contenu : Astro a été conçu pour présenter votre contenu et pour vous permettre d’opter pour l’interactivité uniquement en cas de besoin. Une application Nuxt existante peut être conçue pour une interactivité élevée côté client. Astro possède des fonctionnalités intégrées pour travailler avec votre contenu, telles que la génération de pages, mais peut nécessiter les techniques avancées d’Astro pour inclure des éléments plus difficiles à reproduire en utilisant des composants
.astro, comme les tableaux de bord.
Convertir votre projet NuxtJS
Section intitulée « Convertir votre projet NuxtJS »Chaque migration de projet sera différente, mais vous effectuerez certaines actions courantes lors de la conversion de Nuxt vers Astro.
Créer un nouveau projet Astro
Section intitulée « Créer un nouveau projet Astro »Utilisez la commande create astro de votre gestionnaire de paquets pour lancer l’assistant CLI d’Astro ou choisissez un thème de communauté dans la vitrine de thèmes d’Astro.
Vous pouvez utiliser un argument --template avec la commande create astro pour démarrer un nouveau projet Astro avec l’un de nos modèles de démarrage officiels (par exemple docs, blog, portfolio). Vous pouvez également démarrer un nouveau projet à partir de n’importe quel dépôt Astro existant sur GitHub.
# exécuter l'assistant CLI d'Astronpm create astro@latest
# créer un nouveau projet en utilisant un exemple officielnpm create astro@latest -- --template <example-name># exécuter l'assistant CLI d'Astropnpm create astro@latest
# créer un nouveau projet en utilisant un exemple officielpnpm create astro@latest --template <example-name># exécuter l'assistant CLI d'Astroyarn create astro@latest
# créer un nouveau projet en utilisant un exemple officielyarn create astro@latest --template <example-name>Ensuite, copiez les fichiers existants de votre projet Nuxt vers votre nouveau projet Astro dans un dossier séparé en dehors de src.
Consultez https://astro.new pour la liste complète des modèles de démarrage officiels et des liens pour ouvrir un nouveau projet dans IDX, StackBlitz, CodeSandbox ou Gitpod.
Installer des intégrations (facultatif)
Section intitulée « Installer des intégrations (facultatif) »Vous trouverez peut-être cela utile d’installer certaines des intégrations facultatives d’Astro lors de la conversion de votre projet Nuxt en Astro :
-
@astrojs/vue : pour réutiliser certains de vos composants d’interface utilisateur Vue dans votre nouveau site Astro ou pour continuer à coder avec des composants Vue.
-
@astrojs/mdx : pour importer des fichiers MDX existants de votre projet Nuxt ou pour utiliser MDX dans votre nouveau site Astro.
Placer votre code source dans src
Section intitulée « Placer votre code source dans src »-
Déplacez les contenus du dossier
static/de Nuxt danspublic/.Astro utilise le répertoire
public/pour les ressources statiques. Ce dernier est semblable au dossierstatic/de Nuxt. -
Copiez ou déplacez les autres fichiers et dossiers de Nuxt (par exemple,
pages,layoutsetc.) dans le dossiersrc/d’Astro.Comme Nuxt, le dossier
src/pages/d’Astro est un dossier spécial utilisé pour le routage basé sur des fichiers. Tous les autres dossiers sont facultatifs et vous pouvez organiser le contenu de votre dossiersrc/comme vous le souhaitez. D’autres dossiers courants dans les projets Astro incluentsrc/layouts/,src/components,src/styles,src/scripts.
Convertir les pages SFC de Vue en fichiers .astro
Section intitulée « Convertir les pages SFC de Vue en fichiers .astro »Voici quelques conseils pour convertir un composant Nuxt .vue en un composant .astro :
-
Utilisez le
<template>de la fonction du composant NuxtJS existant comme base pour votre modèle HTML. -
Remplacez toute syntaxe Nuxt ou Vue par une syntaxe Astro ou par des normes web HTML. Ceci comprend
<NuxtLink>,:class,{{variable}}etv-if, par exemple. -
Déplacez le JavaScript présent dans
<script>dans un « délimiteur de code » (---). Convertissez les propriétés de récupération de données de votre composant en JavaScript exécuté côté serveur - consultez la récupération de données, de Nuxt vers Astro. -
Utilisez
Astro.propspour accéder à toutes les props supplémentaires précédemment transmises à votre composant Vue. -
Décidez si les composants importés doivent également être convertis en syntaxe Astro. Avec l’intégration officielle installée, vous pouvez utiliser les composants Vue existants dans votre fichier Astro. Mais vous souhaiterez peut-être les convertir en composants
.astro, surtout s’ils n’ont pas besoin d’être interactifs !
Voir un exemple d’une application Nuxt convertie étape par étape.
Comparaison : Vue vs Astro
Section intitulée « Comparaison : Vue vs Astro »Comparez le composant Nuxt suivant et un composant Astro correspondant :
<template> <div> <p v-if="message === 'Not Found'"> Le dépôt que vous recherchez n'existe pas </p> <div v-else> <Header/> <p class="banner">Astro possède {{stars}} 🧑🚀</p> <Footer /> </div> </div></template>
<script>import Vue from 'vue'
export default Vue.extend({ name: 'IndexPage', async asyncData() { const res = await fetch('https://api.github.com/repos/withastro/astro') const json = await res.json(); return { message: json.message, stars: json.stargazers_count || 0, }; }});</script>
<style scoped>.banner { background-color: #f4f4f4; padding: 1em 1.5em; text-align: center; margin-bottom: 1em;}<style>---import Header from "./header";import Footer from './footer';import "./layout.css";
const res = await fetch('https://api.github.com/repos/withastro/astro')const json = await res.json()const message = json.message;const stars = json.stargazers_count || 0;---
{message === "Not Found" ? <p>Le dépôt que vous recherchez n'existe pas</p> : <> <Header /> <p class="banner">Astro possède {stars} 🧑🚀</p> <Footer /> </>}
<style> .banner { background-color: #f4f4f4; padding: 1em 1.5em; text-align: center; margin-bottom: 1em; }<style>Migrer les fichiers de mise en page
Section intitulée « Migrer les fichiers de mise en page »Vous trouverez peut-être cela utile de commencer par convertir vos mises en page et modèles Nuxt en composants Astro de mise en page.
Chaque page Astro nécessite explicitement la présence des balises <html>, <head> et <body>. Votre fichier layout.vue et vos modèles Nuxt ne les incluront pas.
Notez le modèle HTML standard et l’accès direct à <head> :
<html lang="fr"> <head> <meta charset="utf-8" /> <link rel="icon" type="image/svg+xml" href="/favicon.svg" /> <meta name="viewport" content="width=device-width" /> <title>Astro</title> </head> <body> <!-- Enveloppez l'élément slot avec votre modèle de mise en page existant --> <slot /> </body></html>