Implementación de sitios web de Next.js en Azure Static Web Apps
La compatibilidad de Next.js en Azure Static Web Apps puede clasificarse en dos modelos de implementación:
Híbrido: sitios de Next.js híbridos, que incluyen compatibilidad con todas las características de Next.js, como App Router, Pages Router y componentes de React Server
Estático: sitios de Next.js estáticos, que usan la opción de exportación de HTML estático de Next.js.
Aplicación Next.js híbrida (versión preliminar)
Static Web Apps admite la implementación de sitios web híbridos de Next.js. Esto permite la compatibilidad con todas las características de Next.js, como App Router y los componentes de React Server.
Las aplicaciones Next.js híbridas se hospedan con el host de contenido estático distribuido globalmente y las funciones de back-end administradas de Static Web Apps. Las funciones de back-end de Next.js se hospedan en una instancia dedicada de App Service para garantizar la compatibilidad total con las características.
Con las aplicaciones de Next.js híbridas, las páginas y los componentes se pueden representar de forma dinámica, estática o incremental. Next.js determina de manera automática el mejor modelo de representación y de almacenamiento en caché en función de la captura de datos para obtener un rendimiento óptimo.
Las características clave que están disponibles en la versión preliminar son:
- App Router y Pages Router
- Componentes de React Server
- Representación híbrida
- Controladores de ruta
- Optimización de imágenes
- Internacionalización
- Software intermedio
- Autenticación
Siga el tutorial de implementación de aplicaciones de Next.js híbridas para aprender a implementar una aplicación de Next.js híbrida en Azure.
Características no admitidas en versión preliminar
Las siguientes características de Static Web Apps no se admiten para Next.js con representación híbrida:
- Seleccionar servicios de Azure: API vinculadas que usan Azure Functions, Azure App Service, Azure Container Apps o Azure API Management.
- Características de la CLI de SWA: emulación e implementación local de la CLI de SWA.
- Soporte parcial de características: no se admiten las siguientes propiedades en el archivo
staticwebapp.config.json
:- No se admite la reserva de navegación.
- Las reescrituras de rutas a las rutas que se encuentran dentro de la aplicación de Next.js deben configurarse en
next.config.js
. - La configuración que se encuentra dentro del archivo
staticwebapp.config.json
tiene prioridad sobre la configuración dentro denext.config.js
. - La configuración del sitio de Next.js debe controlarse mediante
next.config.js
para obtener una compatibilidad completa con las características.
- Compilación omitiendo: para aplicaciones de Next.js si
skip_api_build=true
, Static Web Apps no quita las dependencias de desarrollo ni agrega el paquete sharp de manera predeterminada. Si quiere estas optimizaciones, agréguelas a los pasos de compilación personalizados antes de pasarskip_app_build=true
. - Regeneración estática incremental (ISR): no se admite el almacenamiento en caché de imágenes.
Nota:
El tamaño máximo de la aplicación de Next.js híbrida es 250 MB. Use la característica independiente de Next.js para tamaños de aplicación optimizados. Si esto no fuera suficiente, considere la posibilidad de usar la exportación a HTML estático de Next.js si el requisito de tamaño de la aplicación es superior a 250 MB.
Representación del lado servidor
Los siguientes pasos muestran cómo asociar un back-end personalizado al plan estándar y a las aplicaciones web estáticas superiores.
Nota:
Los back-end vinculados solo están disponibles para los sitios que usan el plan estándar o superior.
Vaya a la aplicación web estática en Azure Portal.
Seleccione Configuración y, después, API en el menú lateral.
Seleccione Configurar back-end vinculado.
Cree un nuevo plan de App Service o seleccione un plan de App Service existente.
El plan de App Service seleccionado debe usar al menos una SKU de S1.
Haga clic en Link.
Exportación HTML estática
Puede implementar un sitio estático de Next.js mediante la característica de exportación HTML estática de Next.js. Esta configuración genera archivos HTML estáticos durante la compilación, que se almacenan en caché y se reutilizan para todas las solicitudes. Consulte las características admitidas de las exportaciones estáticas de Next.js.
Los sitios de Next.js estáticos se hospedan en la red distribuida globalmente de Azure Static Web Apps para obtener un rendimiento óptimo. Además, puede agregar back-end vinculados para las API.
Para habilitar la exportación estática de una aplicación de Next.js, agregue output: 'export'
a nextConfig en next.config.js
.
/** @type {import('next').NextConfig} */
const nextConfig = {
output: 'export',
// Optional: Change the output directory `out` -> `dist`
// distDir: 'dist',
}
module.exports = nextConfig
También debe especificar el valor de output_location
en la configuración de Acciones de GitHub/Azure DevOps. De forma predeterminada, este valor está establecido en out
según los valores predeterminados de Next.js. Si se indica una ubicación de salida personalizada en la configuración de Next.js, el valor proporcionado para la compilación debe coincidir con el configurado en la exportación de Next.js.
Si usa scripts de compilación personalizados, establezca IS_STATIC_EXPORT
en true
en la tarea Static Web Apps del archivo YAML de Acciones de GitHub/Azure DevOps.
En el ejemplo siguiente se muestra el trabajo de Acciones de GitHub que está habilitado para las exportaciones estáticas.
- 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
Siga el tutorial implementación de sitios web de Next.js de representación estática para aprender a implementar una aplicación de Next.js exportada estáticamente en Azure.