Next.js + Kubernetes

Microservices with Node JS and React

El proyecto contiene un submódulo, clona con estos parámetros:

git clone –recursive https://github.com/josecho/MicroServicesNatsStreamingBlog.git

El código ha ido cambiando, para ver el código exacto mencionado en la publicación:

git checkout handlingPayments

git clone https://github.com/josecho/MSNatsStreamCommon-.git

Qué es Client-side rendering (CSR)?

Client-side rendering (CSR) significa renderizar páginas en el navegador usando JavaScript. Toda la lógica, la obtención de datos, las plantillas y el enrutamiento se manejan en el cliente en lugar del servidor. El renderizado del lado del cliente puede ser difícil de conseguir y mantenerlo rápido en los dispositivos móviles.
Client-Side Rendering

Qué es server-side rendering?

Server-side rendering (SSR)  es la capacidad de una aplicación para convertir archivos HTML en el servidor en una página HTML renderizada para el cliente. El navegador web envía una petición de información al servidor, este responde instantáneamente enviando una página completamente renderizada al cliente.
Server Side Rendered
Nextjs inspect URL

Qué es Next.js?

Next. js es a un framework de React que habilita varias funciones adicionales, incluido server-side rendering y la generación de sitios web estáticos. Por otra parte, React es una librería de JavaScript que se utiliza para crear aplicaciones web renderizadas en el navegador del cliente con JavaScript.

Next.js is a react based framework

En esta aplicación, se ha utilizado Javascript para escribir el módulo del cliente, no Typescript. Por lo general, sería beneficioso usar TS, pero esta aplicación en particular necesitaría muchas cosas adicionales de TS escritas y obtendría pocos beneficios, por ello no se ha utilizado TS.

Next.js + Kubernetes

Esta aplicación (puedes ver el código en los enlaces exitentes arriba de todo de la página), utiliza SSR y esta desplegada en una infraestructura de Kubernetes. A continuación, veremos algunos de los puntos en los que Next.js se ve afectado por este entorno K8s.

Configuración de Webpack personalizada: Next.js + Docker

Next.js tiene problemas con la detección de cambios de archivos cuando se ejecuta dentro de un contenedor Docker. Next.js no siempre refleja las actualizaciones de archivos, incluso cuando a veces parece funcionar. Para detectar cambios en los archivos, creamos el archivo next.config.js.

Weppack middleware

Next.js carga este archivo cada vez que se inicia nuestro proyecto. Esta función de middleware modifica el comportamiento de webpack . En lugar de seguir la configuración predeterminada para observar los cambios en los archivos, se le solicita que extraiga los archivos modificados de nuestro directorio de proyectos cada 300 milisegundos.

Qué es el archivo _APP js en NextJS?

Usa __app.js para extender las aplicaciones React en Next.js. Cuando utilices Next.js, lo más probable es que debas anular el componente App global para obtener acceso a algunas funciones, como el estado persistente o los diseños globales.

Next.js usa el componente App para inicializar las páginas. Puedes sobreescribir y controlar la inicialización de página y:

  • Conservar los diseños entre cambios de página.
  • Mantener el estado al navegar por las páginas
  • Gestión personalizada de errores mediante componentDidCatch
  • Inyectar datos adicionales en las páginas
  • Agregar CSS global

Para anular la App predeterminada, cree el archivo _app.js como se muestra a continuación:


Custom app


Como puedes ver arriba, estamos personalizando la aplicación agregando CSS y creando un encabezado globalmente. Al mismo tiempo, AppComponent envuelve todos los componentes de la aplicación.

Desafortunadamente, cuando vinculamos getInitialProps con AppComponent, la función getInitialProps que vinculamos a una página individual ya no se invoca.

Next.js

Por esta razón, debemos realizar la llamada a las funciones getInitialProps que vinculamos a una página individual desde el componente App, tal y como se ve en la línea 20.

if (appContext.Component.getInitialProps) {

        pageProps = awaitappContext.Component.getInitialProps(appContext.ctx);

}

Next.js