Monorepos de Node con Nx

Rate this content
Bookmark
Github

Varias apis y varios equipos en el mismo repositorio pueden causar muchos dolores de cabeza, pero Nx te tiene cubierto. Aprende a compartir código, mantener archivos de configuración y coordinar cambios en un monorepo que puede escalar tanto como tu organización. Nx te permite dar estructura a un repositorio con cientos de colaboradores y elimina las desaceleraciones de CI que normalmente ocurren a medida que crece la base de código.


Índice de contenidos:

- Laboratorio 1 - Generar un espacio de trabajo vacío

- Laboratorio 2 - Generar una api de node

- Laboratorio 3 - Ejecutores

- Laboratorio 4 - Migraciones

- Laboratorio 5 - Generar una biblioteca de autenticación

- Laboratorio 6 - Generar una biblioteca de base de datos

- Laboratorio 7 - Añadir un cli de node

- Laboratorio 8 - Limites de módulo

- Laboratorio 9 - Plugins y Generadores - Introducción

- Laboratorio 10 - Plugins y Generadores - Modificación de archivos

- Laboratorio 11 - Configuración de CI

- Laboratorio 12 - Caché distribuida

FAQ

NX es una herramienta que ayuda a gestionar monorepos para proyectos utilizando múltiples tecnologías y lenguajes, facilitando la ejecución de comandos, compartición de código y la gestión de dependencias de manera eficiente.

Los monorepos con NX ofrecen cambios atómicos, permiten compartir código fácilmente y proporcionan un único conjunto de dependencias, lo que facilita la gestión y actualización de las mismas.

No, NX es agnóstico respecto al lenguaje y el marco de trabajo, por lo que puede utilizarse con diversos lenguajes como Java, Python, .NET, además de JavaScript.

NX ayuda a manejar un único conjunto de dependencias en un monorepo, lo que reduce los problemas de versiones incompatibles entre aplicaciones y facilita las actualizaciones de las mismas.

NX Cloud es una extensión de NX que ofrece almacenamiento en caché distribuido y ejecución de tareas distribuidas, optimizando los tiempos de compilación y pruebas al compartir resultados de tareas entre todos los miembros del equipo.

Isaac Mann
Isaac Mann
160 min
06 Apr, 2023

Comments

Sign in or register to post your comment.

Video Summary and Transcription

Esta masterclass explora los Monorepos de Node con NX, destacando los beneficios de los monorepos y NX en la gestión de la complejidad, el intercambio de código y la gestión de dependencias. Cubre la creación y uso de bibliotecas, la configuración de límites de módulo, el linting y la integración de CI/CD. La masterclass también introduce NX Cloud, que ofrece caché distribuida y ejecución de tareas para mejorar el rendimiento. En general, la masterclass proporciona ideas prácticas y herramientas para un desarrollo y una ingeniería de software eficientes en un entorno de monorepo.

Available in English: Node Monorepos with Nx

1. Introducción a Node Monorepos con NX

Short description:

Bienvenidos a Node Monorepos con NX. Esta masterclass estará orientada hacia Node como el marco de trabajo utilizado con NX. NX es agnóstico en cuanto a marcos de trabajo y lenguajes, lo que te permite utilizar aplicaciones de front-end como React o Angular, así como otros lenguajes como Java y Python. Los Monorepos ofrecen beneficios como cambios atómicos, fácil compartición de código y gestión simplificada de dependencias.

Muy bien, bienvenidos a Node Monorepos con NX. Esto es genial. Entonces yo soy, mi nombre es Isaac Mann. Soy un arquitecto en NX. Hemos estado, he estado trabajando con NX durante cuatro años. He sido empleado de NX durante cuatro años. Lo utilicé durante dos años antes de eso. Y sí, esto es emocionante. Así que esta masterclass estará orientada hacia Node como el marco de trabajo que estaremos utilizando con NX. Pero NX es, ya sabes, es prácticamente marco de trabajo y lenguaje agnóstico. Pero entraremos en eso más adelante. Así que es, ya sabes, puedes utilizar aplicaciones de front-end como React o Angular o ya sabes, cualquier otra tecnología de front-end que estés utilizando. Tú también puedes utilizar otros lenguajes como obviamente la gente utiliza Java y Python y .NET con NX. Así que NX se trata de, ya sabes, gestionar tu base de código y cualquier código que estés utilizando es esto es Node monorepos con NX. Y primero, vamos a empezar con una pequeña discusión de, por qué querrías un monorepo. Así que un monorepo es cualquier repositorio que tiene más de una aplicación viviendo en esa, en esa base de código. Entonces, ¿cuál es el beneficio de un monorepo? Así que tres categorías grandes de beneficios para monorepos. Monorepo te da cambios atómicos, te permite compartir fácilmente tu código y te da un único conjunto de dependencias, facilitando la gestión de esas dependencias. Así que vamos a profundizar en cada una de estas tres cosas y explicar

2. Beneficios de Monorepo y NX

Short description:

Un monorepo ofrece beneficios como cambios atómicos, fácil compartición de código y gestión simplificada de dependencias. Permite una ejecución de comandos más rápida, pruebas dirigidas para proyectos afectados y almacenamiento en caché local y distribuido. NX proporciona herramientas para ayudar a lograr los beneficios de un monorepo sin los inconvenientes de la colocación de código. Permite compartir código de manera controlada y una gestión eficiente de las dependencias.

qué son y por qué son beneficiosos. Entonces, si tuvieras una aplicación y una especie de biblioteca que es utilizada por esa aplicación. Y si los gestionas en dos repositorios separados, digamos que haces un cambio en la biblioteca UI que está en el repositorio dos en la parte inferior aquí. Si haces un cambio en ella, y por alguna razón rompe la aplicación de la página de inicio, el ciclo de vida de ese cambio sería que alguien hace un cambio en la biblioteca común UI. Suben el commit, en algún momento después alguien intenta usar esa nueva versión de la biblioteca común UI en la aplicación de la página de inicio. Se dan cuenta de que hay un cambio que rompe su aplicación. Entonces presentan un error con la biblioteca común UI, y dicen, Oye, tienes que arreglar esto. Y luego, una vez que el desarrollador de la biblioteca UI ve ese problema, hacen el cambio, suben una nueva corrección, una nueva versión, y luego las personas de la aplicación de la página de inicio tienen que actualizar la versión a la versión corregida, y luego ver si arregló su aplicación. Así que ese ciclo completo, normalmente, en el mejor de los casos tarda unos días, puede llevar una semana o dos si las personas no están trabajando en estas cosas a tiempo completo. Entonces, uno de los problemas aquí es, si pusieras ambas, la biblioteca y la aplicación juntas en el mismo repositorio, entonces ese ciclo sería, sería solo el creador de la biblioteca UI, haciendo un cambio, ejecutando las pruebas y viendo Oh, rompí las pruebas en la aplicación de la página de inicio, tengo que arreglar eso. Y eso, ese ciclo tomará como media hora o una hora. Incluso antes de que hayas subido un PR, te darías cuenta de que rompiste la aplicación, tienes que modificar tu code. Entonces, tienes en un PR, ya sabes, todos los cambios que necesitas hacer a la aplicación o los cambios que necesitas hacer en la biblioteca UI para adaptarse a la aplicación. Eso es un beneficio de un monorepo. El segundo beneficio es compartir code. Digamos que tienes alguna lógica sobre qué es un nombre de usuario válido. Y esta función, obviamente, en diferentes escenarios, tendrías una función más compleja que esta, estás manejando si el nombre de usuario es válido. Pero digamos que quieres compartir esto a través de tu aplicación a través de múltiples aplicaciones, múltiples bibliotecas. Si esto alguna vez cambiara, tendrías que actualizar eso en cada repositorio que lo esté utilizando. Si estás copiando el code de repositorio a repositorio, mientras que si estás en un entorno de monorepo, puedes simplemente usar esta función. Y cuando esa función cambia, entonces tu comportamiento cambia en todo el repositorio, donde sea que se esté utilizando. Así que compartir code fácilmente. La tercera cosa es tener un único conjunto de dependencias. Entonces, si tienes un framework como Node, o en este caso, en la imagen es react, si tienes diferentes versiones de ese framework siendo utilizadas en diferentes aplicaciones, puedes encontrarte con errores de tiempo de ejecución muy extraños y difíciles de debug. Y, y tener tu code en el mismo repositorio básicamente te obliga a tener, bueno puedes establecer reglas para obligarte a estar en la misma versión para todo lo que está en ese repositorio. Es posible tener múltiples versiones del mismo monorepo, pero es, es mejor tener una sola versión y facilitar las cosas a largo plazo. Así que básicamente en un entorno grande cuando tienes múltiples aplicaciones, normalmente tienes una aplicación en la que estás trabajando todo el tiempo, que está en la última versión de las dependencias que tienes, pero si vas a tener, ya sabes, dos o tres otras aplicaciones que se trabajan tal vez una vez cada par de meses y esas inevitablemente se quedan atrás y tienes que recordar, ¿cómo actualicé ese framework? Um, ya sabes, esto, la actualización de hace seis meses, y tienes que recordar y pasar por todo ese mismo trabajo de nuevo. Um, mientras que si estuvieras actualizando todas tus aplicaciones, todas tres aplicaciones al mismo tiempo, es mucho más fácil que actualizar tres aplicaciones diferentes, en diferentes momentos a lo largo de un año y medio. Um, así que lo haces todo de una vez y es mucho más fácil que hacerlo repartido en un año o cuando pienses en actualizar esas aplicaciones. Bien. Entonces, una forma de, ya sabes, tener un monorepo, um, la diferencia entre un monorepo y la colocación de code y la colocación de code es cuando simplemente juntas todas las aplicaciones en el mismo repositorio sin tener ninguna tooling para gestionar eso. Y eso, eso puede ser una pesadilla. Si simplemente lo juntas todo, um, puedes terminar con un escenario en el que estás ejecutando pruebas innecesarias. No tienes límites de code y todo el code se mezcla y es difícil de mantener. Um, y puedes tener tooling inconsistente donde tienes conflictos entre cómo esas herramientas interactúan entre sí como tus herramientas de testing o tus otras herramientas que tengas. Um, entonces, hablemos de ejecutar pruebas innecesarias. Digamos, um, que tienes una biblioteca llamada la página de inicio del producto. Um, que está utilizando el producto compartido UI. Si hicieras un cambio solo en el proyecto de la página de inicio del producto, um, sabes que necesitas ejecutar las pruebas para ese proyecto para asegurarte de que no rompiste nada. Pero, ya sabes, también sabes que no tienes que ejecutar las pruebas en el producto compartido UI porque, ya sabes, no hay forma posible de que puedas haber roto la prueba en el producto compartido UI. Si lo único que cambiaste fue este proyecto superior. Entonces, si no tienes ninguna tooling configurada en tu repositorio, que entienda tu gráfico de dependencias aquí, um, y para asegurarte de que no rompiste nada, tendrías que ejecutar las pruebas para todo en tu repositorio. Um, cada vez que haces un cambio en cualquier lugar en tu repositorio. Um, sería mejor tener alguna tooling para entender que solo necesito ejecutar pruebas en la página de inicio del producto, no en el producto compartido UI. Y esto obviamente es un, ya sabes, es un escenario muy simple, un repositorio real. Y este es incluso un pequeño ejemplo de repositorio aquí, este ejemplo, um, una configuración más típica sería algo como esto, donde tienes muchos nodos diferentes y necesitas algún, ya sabes, algún ordenador para entender qué pruebas realmente necesito ejecutar en lugar de tener a una persona tratando de recordar todas estas diferentes líneas del gráfico de dependencias. Um, para saber que tienes que ejecutar estas pruebas y no estas pruebas. Um, quieres asegurarte de ejecutar todas las pruebas que necesitas ejecutar, pero no las pruebas que no tienes que ejecutar. Bien, número dos, no hay límites de code. Entonces, si simplemente juntas todo, um, podrías tener algún code que escribas para, en tu biblioteca UI, que solo está destinado para que lo uses tú mismo, um, para que lo uses dentro de ese proyecto. Y no estás listo para que otras personas empiecen a usarlo todavía. No quieres mantener esa superficie de API. Um, pero no hay nada que impida a las personas entrar en tu, um, tu proyecto y, y usar alguna función que solo quieres para ti. Pero ellos dicen, Oh, hay code que me gusta, quiero usarlo. Y ahora porque lo están usando, estás atrapado manteniendo esa API y no puedes cambiar ella. Um, porque si la cambias, romperás su aplicación. Um, entonces necesitas alguna tooling configurada para decir, estas son las funciones que estoy, que estoy bien con que otras personas usen, y estas son funciones que son puramente internas y solo para, para mis proyectos, um, para usar.

Watch more workshops on topic

React a Escala con Nx
React Summit 2023React Summit 2023
145 min
React a Escala con Nx
Top Content
Featured WorkshopFree
Isaac Mann
Isaac Mann
Vamos a utilizar Nx y algunos de sus plugins para acelerar el desarrollo de esta aplicación.
Algunas de las cosas que aprenderás:- Generar un espacio de trabajo Nx prístino- Generar aplicaciones frontend React y APIs backend dentro de tu espacio de trabajo, con proxies preconfigurados- Crear librerías compartidas para reutilizar código- Generar nuevos componentes enrutados con todas las rutas preconfiguradas por Nx y listas para usar- Cómo organizar el código en un monorepositorio- Mover fácilmente las librerías alrededor de tu estructura de carpetas- Crear historias de Storybook y pruebas e2e de Cypress para tus componentes
Tabla de contenidos: - Lab 1 - Generar un espacio de trabajo vacío- Lab 2 - Generar una aplicación React- Lab 3 - Ejecutores- Lab 3.1 - Migraciones- Lab 4 - Generar una librería de componentes- Lab 5 - Generar una librería de utilidades- Lab 6 - Generar una librería de rutas- Lab 7 - Añadir una API de Express- Lab 8 - Mostrar un juego completo en el componente de detalle de juego enrutado- Lab 9 - Generar una librería de tipos que la API y el frontend pueden compartir- Lab 10 - Generar historias de Storybook para el componente de interfaz de usuario compartido- Lab 11 - Prueba E2E del componente compartido

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Elevando Monorepos con los Espacios de Trabajo de npm
DevOps.js Conf 2022DevOps.js Conf 2022
33 min
Elevando Monorepos con los Espacios de Trabajo de npm
Top Content
Aprenda más sobre cómo aprovechar las características predeterminadas de los espacios de trabajo de npm para ayudarlo a administrar su proyecto monorepo, mientras también explora algunas de las nuevas características de npm cli.
Poner fin al dolor: Repensando CI para Monorepos Grandes
DevOps.js Conf 2024DevOps.js Conf 2024
25 min
Poner fin al dolor: Repensando CI para Monorepos Grandes
Escalar bases de código grandes, especialmente monorepos, puede ser una pesadilla en los sistemas de Integración Continua (CI). El panorama actual de las herramientas de CI tiende a ser orientado a máquinas, de bajo nivel y exigente en términos de mantenimiento. Lo peor es que a menudo están desconectadas de las necesidades y el flujo de trabajo real del desarrollador.¿Por qué es un obstáculo el CI? Porque los sistemas de CI actuales son comodines, sin una comprensión específica de tu base de código. No pueden aprovechar el contexto en el que operan para ofrecer optimizaciones.En esta charla, exploraremos el futuro del CI, diseñado específicamente para bases de código grandes y monorepos. Imagina un sistema de CI que comprenda la estructura de tu espacio de trabajo, paralelice dinámicamente las tareas en máquinas utilizando datos históricos, y haga todo esto con una configuración mínima y de alto nivel. Repensemos el CI, haciéndolo más inteligente, eficiente y alineado con las necesidades del desarrollador.
Microfrontends Federados a Gran Escala
React Summit 2023React Summit 2023
31 min
Microfrontends Federados a Gran Escala
Top Content
La charla será una historia de cómo Personio pasó de renderizar a través de una arquitectura PHP monolítica, a una aplicación Next JS orientada a microfrontends, impulsada por la Federación de Módulos y la cadena de herramientas del monorepositorio NX.
Escala tu aplicación de React sin micro-frontends
React Summit 2022React Summit 2022
21 min
Escala tu aplicación de React sin micro-frontends
A medida que tu equipo crece y se convierte en múltiples equipos, el tamaño de tu base de código también crece. Llegas a las 100k líneas de código y el tiempo de compilación se acerca peligrosamente a los 10 minutos 😱 Pero eso no es todo, tus verificaciones estáticas de CI (linting, cobertura de tipos, código muerto) y pruebas también están tardando cada vez más...¿Cómo puedes mantener a tus equipos avanzando rápidamente y enviando funciones a los usuarios de manera regular si tus PRs tardan una eternidad en ser probados y desplegados?Después de explorar algunas opciones, decidimos seguir el camino de Nx. ¡Veamos cómo migrar una gran base de código a Nx y aprovechar sus compilaciones incrementales!
La Era de los Monorepos
JSNation 2022JSNation 2022
25 min
La Era de los Monorepos
La historia de la web se puede dividir en saltos evolutivos en el desarrollo. La era de los scripts en línea, la era de jQuery, la era de las SPAs, la era de JAMStack...Ahora estamos entrando en la siguiente etapa que ha sido cuidadosamente preparada en los últimos años. Permíteme invitarte al mundo de las soluciones modernas de monorepo y compartir contigo los beneficios que obtendrás al usarlas en proyectos de cualquier tamaño y configuración. Es hora de automatizar esas tareas de boilerplate y reducir los cuellos de botella para que puedas centrarte en lo que realmente importa.¡Prepárate para el próximo salto! ¡Bienvenido a la era de los monorepos!
Remixando tu Stack en un Espacio de Trabajo Monorepo
Remix Conf Europe 2022Remix Conf Europe 2022
22 min
Remixando tu Stack en un Espacio de Trabajo Monorepo
Remix entró en escena con una visión única y refrescante sobre cómo desarrollar en la web. Pero, ¿cómo lo integras en tu ecosistema existente de aplicaciones? ¿Quieres probar Remix en un proyecto pequeño o quieres ir a fondo, pero es complicado hacer una migración completa desde tu aplicación React existente? En esta charla, vamos a explorar cómo una organización de código basada en monorepo puede ayudar a integrar Remix con tu infraestructura existente de React y TypeScript, facilitando la reutilización de código y un camino de migración hacia Remix.