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.
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 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 avecAstro.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 :
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>
:
Migration depuis le répertoire pages
de Next.js
Titre de la section Migration depuis le répertoire pages de Next.jsVotre projet Next peut avoir un fichier pages/_document.jsx
qui importe des composants React pour personnaliser le <head>
de votre application :
-
Créez un nouveau fichier de mise en page Astro en utilisant uniquement le JSX renvoyé.
-
Remplacez tous les composants React par
<html>
,<head>
,<slot>
et d’autres balises HTML standard.
Migration depuis le répertoire /app
de Next.js
Titre de la section Migration depuis le répertoire /app de Next.jsLes fichiers de mise en page du répertoire app/
de Next.js sont créés avec deux fichiers : un fichier layout.jsx
pour personnaliser les contenus de <html>
et de <body>
, et un fichier head.jsx
pour personnaliser le contenu de l’élément <head>
.
-
Créez un nouveau fichier de mise en page Astro en utilisant uniquement le JSX renvoyé.
-
Remplacez ces deux fichiers par un seul fichier de mise en page Astro qui contient un shell de page (les balises
<html>
,<head>
et<body>
) et un<slot/>
à la place de la propriété{children}
de React :
Migration de pages et des articles
Titre de la section Migration de pages et des articlesDans Next.js, vos articles se trouvent soit dans /pages
, soit dans /app/routeName/page.jsx
.
Avec Astro, tous les contenus de vos pages doivent vivre à l’intérieur du dossier src/
, soit dans src/pages
, soit dans src/content
.
Pages React
Titre de la section Pages ReactVos pages Next JSX (.js
) existantes devront être converties des fichiers JSX en pages .astro
. Vous ne pouvez pas réutiliser un fichier JSX de page dans Astro.
Ces pages .astro
doivent être situées dans src/pages/
et les routes des pages seront générées automatiquement en fonction de leur chemin de fichier.
Pages Markdown et MDX
Titre de la section Pages Markdown et MDXAstro dispose d’une prise en charge intégrée pour Markdown et d’une intégration facultative pour les fichiers MDX. Vous pouvez réutiliser tous les fichiers Markdown et MDX existants, mais ils peuvent nécessiter quelques ajustements dans leur frontmatter, comme l’ajout de la propriété spéciale layout
d’Astro. Vous n’aurez plus besoin de créer manuellement des pages pour chaque itinéraire généré par Markdown. Ces fichiers peuvent être placés dans src/pages/
pour profiter du routage automatique basé sur les fichiers.
Alternativement, vous pouvez utiliser les collections de contenu dans Astro pour stocker et gérer votre contenu. Lorsqu’ils font partie d’une collection, les fichiers Markdown et MDX résideront dans des dossiers dans src/content/
. Vous récupérerez vous-même le contenu et générerez ces pages de manière dynamique.
Migration des tests
Titre de la section Migration des testsComme Astro génère du HTML brut, il est possible d’écrire des tests de bout en bout en utilisant la sortie de l’étape de construction. Tous les tests de bout en bout écrits précédemment peuvent fonctionner immédiatement si vous avez réussi à faire correspondre le balisage de votre site Next. Les bibliothèques de tests telles que Jest et React Testing Library peuvent être importées et utilisées dans Astro pour tester vos composants React.
Voir le guide de test d’Astro pour en savoir plus.
Référence : Convertir la syntaxe Next.js en syntaxe Astro
Titre de la section Référence : Convertir la syntaxe Next.js en syntaxe AstroLes liens : de Next vers Astro
Titre de la section Les liens : de Next vers AstroConvertissez tous les composants <Link to="">
, <NavLink>
etc. de Next en balises HTML <a href="">
.
Astro n’utilise aucun composant spécial pour les liens, bien que vous puissiez créer votre propre composant <Link>
. Vous pouvez ensuite importer et utiliser ce <Link>
comme vous le feriez pour n’importe quel autre composant.
Les Imports : de Next vers Astro
Titre de la section Les Imports : de Next vers AstroMettez à jour toutes les importations de fichiers pour référencer exactement les chemins de fichiers relatifs. Cela peut être fait en utilisant des alias d’importation ou en écrivant un chemin relatif dans son intégralité.
Notez que .astro
et plusieurs autres types de fichiers doivent être importés avec leur extension de fichier complète.
La propriété Children : de Next vers Astro
Titre de la section La propriété Children : de Next vers AstroConvertissez toutes les instances de {children}
en <slot />
Astro. Ce dernier n’a pas besoin de recevoir {children}
comme propriété de fonction et restituera automatiquement le contenu enfant dans un <slot />
.
Les composants React qui transmettent plusieurs ensembles d’enfants peuvent être migrés vers un composant Astro à l’aide des emplacements nommés.
En savoir plus sur l’utilisation spécifique de <slot />
dans Astro.
La récupération des données : de Next vers Astro
Titre de la section La récupération des données : de Next vers AstroConvertissez toutes les instances de getStaticProps()
en Astro.glob()
ou getCollection()
/getEntryBySlug()
afin d’accéder aux données d’autres fichiers dans la source de votre projet. Pour récupérer des données distantes, utilisez fetch()
.
Ces demandes de données sont effectuées dans le frontmatter du composant Astro et utilisent une instruction await
de niveau supérieur (« top-level await »).
En savoir plus sur les importations de fichiers locaux avec Astro.glob()
, l’interrogation à l’aide de l’API Collections ou la récupération de données distantes.
Les styles : de Next vers Astro
Titre de la section Les styles : de Next vers AstroVous devrez peut-être remplacer les bibliothèques CSS-in-JS (par exemple, styled-components
) avec d’autres options CSS disponibles dans Astro.
Si nécessaire, convertissez tous les objets de style en ligne (style={{ fontWeight: "bold" }}
) en attributs de style HTML en ligne (style="font-weight:bold;"
). Ou utilisez la balise <style>
d’Astro pour limiter la portée des styles CSS.
Tailwind est pris en charge après l’installation de l’intégration Tailwind. Aucune modification de votre code Tailwind existant n’est requise !
En savoir plus sur les styles dans Astro.
Le composant Next Image vers celui d’Astro
Titre de la section Le composant Next Image vers celui d’AstroConvertissez tous les composants Next <Image />
en composant d’image propre à Astro dans les fichiers .astro
ou .mdx
, ou en code HTML/JSX standard avec la balise <img />
selon les besoins dans vos composants React.
Le composant <Image />
d’Astro fonctionne uniquement dans les fichiers .astro
et .mdx
. Consultez la liste complète de ses attributs de composants et notez que plusieurs différeront des attributs de Next.
Dans les composants React (.jsx
), utilisez la syntaxe d’image JSX standard (<img />
). Astro n’optimisera pas ces images, mais vous pouvez installer et utiliser les packages NPM pour plus de flexibilité.
Vous pouvez en apprendre davantage sur l’utilisation d’images dans Astro dans le guide Images.
Exemple guidé : Récupération des données, de Next vers Astro
Titre de la section Exemple guidé : Récupération des données, de Next vers AstroVoici un exemple de récupération de données Pokédex dans Next.js converties en Astro.
pages/index.js
récupère et affiche une liste des 151 premiers Pokémon en utilisant la PokéAPI REST.
Voici comment recréer cela dans src/pages/index.astro
, en remplaçant getStaticProps()
par fetch()
.
-
Identifiez la déclaration
return()
dans le JSX. -
Créez
src/pages/index.astro
Utilisez la valeur de retour de la fonction Next. Convertissez n’importe quelle syntaxe Next ou React en Astro, y compris en modifiant la casse de tout attribut global HTML.
Remarquez que :
-
.map
fonctionne tout simplement ! -
className
devientclass
. -
<Link>
devient<a>
. -
Le fragment
<> </>
n’est pas requis dans les modèles Astro. -
key
est un attribut React et n’est pas un attribut deli
dans Astro.
-
-
Ajoutez les importations, les props et le JavaScript nécessaires
Remarquez que :
- la fonction
getStaticProps
n’est plus nécessaire. Les données de l’API sont récupérées directement dans la barrière de code. - Un composant
<Layout>
est importé et enveloppe le modèle de page.
- la fonction
Ressources communautaires
Titre de la section Ressources communautaires-
Vidéo : De NextJS vers Astro : plus de contrôle = des sites plus rapides (en).
-
Vidéo : Comment Astro a rendu mon site 100 fois plus rapide (en).
-
Article de blog : Migrer de Next.js vers Astro (en).
-
Article de blog : De NextJS à Astro (en).
-
Article de blog : Convertir Next.js en Astro (en).