Migration depuis Next.js
Voici quelques concepts clés et stratégies de migration pour vous aider à démarrer. Utilisez le reste de nos documents et notre communauté sur Discord pour continuer !
Principales similitudes entre Next.js et Astro
Titre de la section Principales similitudes entre Next.js et AstroNext.js et Astro partagent certaines similitudes qui vous aideront à migrer votre projet :
- La syntaxe des fichiers
.astro
est similaire à celle de JSX. Développer avec Astro devrait vous sembler familier. - 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 itinéraires dynamiques.
- Astro est basé sur les composants, et votre structure de balisage sera similaire avant et après votre migration.
- Astro possède des intégrations officielles pour React, Preact et Solid. Vous pouvez donc utiliser vos composants JSX existants. Notez que dans Astro, ces fichiers doivent avoir une extension
.jsx
ou.tsx
. - Astro prend en charge l’installation de paquets NPM, y compris les bibliothèques React. Beaucoup de vos dépendances existantes fonctionneront dans Astro.
Principales différences entre Next.js et Astro
Titre de la section Principales différences entre Next.js et AstroLorsque vous reconstruisez votre site Next.js dans Astro, vous remarquerez quelques différences importantes :
-
Next.js est une application React monopage et utilise
index.js
comme racine de votre projet. Astro est un site multipage etindex.astro
est votre page d’accueil. -
Les composants
.astro
ne sont pas écrits sous forme de fonctions exportées renvoyant des modèles de page. Au lieu de cela, vous diviserez votre code en une « barrière de code » pour votre JavaScript et en un corps dédié au HTML que vous générez. -
Axé sur le contenu : Astro a été conçu pour présenter votre contenu et pour vous permettre d’opter pour l’interactivité uniquement si nécessaire. Une application Next.js existante peut être conçue pour une interactivité élevée côté client et peut nécessiter des techniques Astro avancées pour inclure des éléments plus difficiles à répliquer à l’aide de composants
.astro
, tels que des tableaux de bord.
Convertissez votre projet Next.js
Titre de la section Convertissez votre projet Next.jsChaque migration de projet sera différente, mais vous effectuerez certaines actions courantes lors de la conversion de Next.js vers Astro.
Créer un nouveau projet Astro
Titre de la section Créer un nouveau projet AstroUtilisez 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 Astro.
Vous pouvez utiliser un argument --template
avec la commande create astro
pour démarrer un nouveau projet Astro avec l’un de nos démarreurs 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 Next 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)
Titre de la section Installer des intégrations (facultatif)Vous trouverez peut-être utile d’installer certaines des intégrations facultatives d’Astro à utiliser lors de la conversion de votre projet Next en Astro :
-
@astrojs/react: pour réutiliser certains de vos composants React orientés UI dans votre nouveau site Astro ou pour continuer à coder des composants React.
-
@astrojs/mdx: pour importer des fichiers MDX existants de votre projet Next ou pour utiliser MDX dans votre nouveau site Astro.
Placer votre code source dans src
Titre de la section Placer votre code source dans srcEn suivant la structure du projet d’Astro:
-
Gardez le dossier
public/
de Next intact.Astro utilise le répertoire
public/
pour les ressources statiques, tout comme Next. Aucune modification n’est nécessaire pour ce dossier, ni pour son contenu. -
Copiez ou déplacez les autres fichiers et dossiers de Next (par exemple,
pages
,styles
, etc.) dans le dossiersrc/
d’Astro pendant que vous reconstruisez votre site en suivant la structure du projet Astro.Comme Next, 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
.
Le fichier de configuration d’Astro
Titre de la section Le fichier de configuration d’AstroAstro possède un fichier de configuration à la racine de votre projet appelé astro.config.mjs
. Ceci est utilisé uniquement pour configurer votre projet Astro et toutes les intégrations installées, y compris les adaptateurs SSR.
Astuces : Convertir les fichiers JSX en fichiers .astro
Titre de la section Astuces : Convertir les fichiers JSX en fichiers .astroVoici quelques conseils pour convertir un composant Next .js
en un composant .astro
:
-
Utilisez le JSX renvoyé par la fonction du composant Next.js existant comme base pour votre modèle HTML.
-
Remplacez toute syntaxe Next ou JSX par une syntaxe Astro ou par des normes web HTML. Ceci comprend
<Link>
,<Script>
,{children}
etclassName
par exemple. -
Déplacez tout le JavaScript nécessaire, y compris les instructions d’importation, dans une « barrière de code » (
---
). Remarque : le JavaScript utilisé pour afficher le contenu de manière conditionnelle est souvent écrit directement dans le modèle HTML dans Astro. -
Utilisez
Astro.props
pour accéder à toutes les props supplémentaires précédemment transmises à votre fonction Next. -
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 React 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 ! -
Remplacez
getStaticProps()
avec des déclarations d’importation ou avecimport.meta.glob()
pour interroger vos fichiers locaux. Utilisezfetch()
pour récupérer des données externes.
Voir un exemple d’un fichier.js
converti étape par étape depuis Next.
Comparaison : JSX vs Astro
Titre de la section Comparaison : JSX vs AstroComparez le composant Next suivant et un composant Astro correspondant :
import Header from "./header";import Footer from "./footer";import "./layout.css";
export async function getStaticProps() { const res = await fetch("https://api.github.com/repos/withastro/astro"); const json = await res.json(); return { props: { message: json.message, stars: json.stargazers_count || 0 }, }}
const Component = ({ stars, message }) => {
return ( <> <Header /> <p style={{ backgroundColor: `#f4f4f4`, padding: `1em 1.5em`, textAlign: `center`, marginBottom: `1em` }}>Astro has {stars} 🧑🚀</p> <Footer /> </> )}
export default Component;
---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;---<Header /><p class="banner">Astro has {stars} 🧑🚀</p><Footer />
<style> .banner { background-color: #f4f4f4; padding: 1em 1.5em; text-align: center; margin-bottom: 1em; }<style>
Migration des fichiers de mise en page
Titre de la section Migration des fichiers de mise en pageVous trouverez peut-être utile de commencer par convertir vos mises en page et modèles Next.js en composants Astro de mise en page.
Next propose deux méthodes différentes pour créer des fichiers de mise en page, chacune gérant les mises en page différemment d’Astro :
-
Le dossier
pages
Chaque page Astro nécessite explicitement la présence des balises <html>
, <head>
et <body>
, il est donc courant de réutiliser un fichier de mise en page sur plusieurs pages. Astro utilise un <slot />
pour le contenu des pages sans aucune déclaration d’importation requise. Notez le modèle HTML standard et l’accès direct à <head>
:
------<html lang="en"> <head> <meta charset="utf-8" /> <link rel="icon" type="image/svg+xml" href="/favicon.svg" /> <meta name="viewport" content="width=device-width" /> <meta name="generator" content={Astro.generator} /> <title>Astro</title> </head> <body> <!-- Enveloppez l'élément slot avec votre modèle de mise en page existant --> <slot /> </body></html>