Déployer des sites web Next.js sur Azure Static Web Apps
La prise en charge de Next.js sur Azure Static Web Apps peut être classée en deux modèles de déploiement :
Hybride : sites Next.js hybrides, qui incluent la prise en charge de toutes les fonctionnalités Next.js comme le Routeur d’application, le Routeur de pages et les composants React Server
Statique : sites Next.js statiques, qui utilisent l’option Exportation HTML statique de Next.js.
Applications Next.js hybrides (préversion)
Static Web Apps prend en charge le déploiement de sites web Next.js hybrides. Cela permet la prise en charge de toutes les fonctionnalités de Next.js, comme le Routeur d’application et les composants React Server.
Les applications Next.js hybrides sont hébergées avec l’hôte de contenu statique globalement distribué Static Web Apps et les fonctions de back-end managées. Les fonctions de back-end Next.js sont hébergées sur une instance App Service dédiée pour garantir la compatibilité complète des fonctionnalités.
Avec les applications hybrides Next.js, les pages et les composants peuvent être affichés dynamiquement, statiquement ou de manière incrémentielle. Next.js détermine automatiquement le meilleur modèle de rendu et de mise en cache en fonction de votre extraction de données pour garantir des performances optimales.
Les principales fonctionnalités disponibles dans la préversion sont les suivantes :
- Routeur d’application et Routeur de pages
- Composants React Server
- Rendu hybride
- Gestionnaires de routes
- Optimisation des images
- Internationalisation
- Middleware
- Authentification
Suivez le tutoriel Déployer des applications Next.js hybrides pour découvrir comment déployer une application Next.js hybride sur Azure.
Fonctionnalités non prises en charge dans la préversion
Les fonctionnalités suivantes de Static Web Apps ne sont pas prises en charge pour Next.js avec le rendu hybride :
- Sélectionner des services Azure : API liées utilisant Azure Functions, Azure App Service, Azure Container Apps ou Gestion des API Azure.
- Fonctionnalités de l’interface CLI SWA : émulation et déploiement locaux de l’interface CLI SWA.
- Prise en charge des fonctionnalités partielles : les propriétés suivantes dans le fichier
staticwebapp.config.json
ne sont pas prises en charge :- Le secours de navigation n’est pas pris en charge.
- Les réécritures de routes vers des routes au sein de l’application Next.js doivent être configurées dans
next.config.js
. - La configuration dans le fichier
staticwebapp.config.json
est prioritaire sur la configuration dansnext.config.js
. - La configuration du site Next.js doit être gérée avec
next.config.js
pour la compatibilité complète des fonctionnalités.
- Ignorer la génération : pour les applications Next.js si
skip_api_build=true
, Static Web Apps ne supprime pas les dépendances de développement ni n’ajoute de package sharp par défaut. Si vous souhaitez bénéficier de ces optimisations, ajoutez-les à vos étapes de génération personnalisée avant de soumettreskip_app_build=true
. - Regénération statique incrémentielle (ISR) : la mise en cache des images n’est pas prise en charge.
Remarque
La taille maximale de l’application Next.js hybride est 250 Mo. Utilisez la fonctionnalité standalone de Next.js pour optimiser les tailles d’application. Si cela ne suffit pas, utilisez Next.js exporté en HTML statique si la taille d’application dont vous avez besoin est supérieure à 250 Mo.
Rendu côté serveur
Les étapes suivantes vous montrent comment associer un back-end personnalisé à vos applications web statiques du plan Standard et supérieur.
Remarque
Les back-ends liés sont disponibles uniquement pour les sites utilisant le plan Standard ou supérieur.
Accédez à votre application web statique dans le Portail Azure.
Sélectionnez Paramètres, puis API dans le menu latéral.
Sélectionnez Configurer le back-end lié.
Créez un plan App Service ou sélectionnez un plan App Service existant.
Votre plan App Service sélectionné doit utiliser au moins une référence SKU S1.
Cliquez sur Lier.
Exportation HTML statique
Vous pouvez déployer un site statique Next.js à l’aide de la fonctionnalité d’exportation HTML statique de Next.js. Cette configuration génère des fichiers HTML statiques durant la build, qui sont mis en cache et réutilisés pour toutes les requêtes. Consultez les fonctionnalités prises en charge des exportations statiques Next.js.
Les sites Next.js statiques sont hébergés sur le réseau globalement distribué Azure Static Web Apps pour des performances optimales. Par ailleurs, vous pouvez ajouter des back-ends liés pour vos API.
Pour activer l’exportation statique d’une application Next.js, ajoutez output: 'export'
à nextConfig dans next.config.js
.
/** @type {import('next').NextConfig} */
const nextConfig = {
output: 'export',
// Optional: Change the output directory `out` -> `dist`
// distDir: 'dist',
}
module.exports = nextConfig
Vous devez également spécifier output_location
dans la configuration GitHub Actions/Azure DevOps. Par défaut, cette valeur est définie sur out
conformément aux valeurs par défaut de Next.js. Si un emplacement de sortie personnalisé est indiqué dans la configuration de Next.js, la valeur fournie pour la génération doit correspondre à celle configurée dans l’exportation de Next.js.
Si vous utilisez des scripts de build personnalisés, définissez IS_STATIC_EXPORT
sur true
dans la tâche Static Web Apps du fichier YAML GitHub Actions/Azure DevOps.
L’exemple suivant montre le travail GitHub Actions qui est activé pour les exportations statiques.
- name: Build And Deploy
id: swa
uses: azure/static-web-apps-deploy@latest
with:
azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_TOKEN }}
repo_token: ${{ secrets.GITHUB_TOKEN }} # Used for GitHub integrations (i.e. PR comments)
action: "upload"
app_location: "/" # App source code path
api_location: "" # Api source code path - optional
output_location: "out" # Built app content directory - optional
env: # Add environment variables here
IS_STATIC_EXPORT: true
Suivez le tutoriel Déployer des sites web Next.js au rendu statique pour découvrir comment déployer une application Next.js exportée de manière statique sur Azure.