Binary Coffee

Desarrollando como Google / Facebook / Microsoft (Monorepos)

angular git monorepo

驴Qu茅 es un monorepo?

La explicaci贸n m谩s sencilla y r谩pida que se puede dar sobre el tema, no es m谩s que tener un grupo de proyectos en un solo repositorio. 驴Pero por qu茅 hacer semejante cosa?, pues a continuaci贸n mostramos la fortaleza de tener tus proyectos en un solo repositorio:

  • 驴Cuantas veces les ha pasado que tienes que reutilizar c贸digo de una aplicaci贸n en otra?. En el mejor de los casos creamos una librer铆a para compartir el c贸digo entre dichas aplicaciones, pero lo que realmente pasa es que sencillamente se copia el c贸digo y se pega en el otro proyecto.
  • 驴Cuantos tienen proyectos que cuentan con m谩s de un frontend, dada las caracter铆sticas del proyecto?
  • 驴C贸mo comparten c贸digo entre proyectos que utilizan diferentes frameworks?. Digamos que tienes un proyecto en Angular y otro en React, 驴c贸mo unirlos o compartir su c贸digo?

Pues todas estas interrogantes y problemas, pueden ser de alguna manera abordados y solucionados con un monorepo.

Primeramente decir, que la idea de tener un monorepo, no es que ahora todos nuestros los proyectos los vamos a encapsular en un solo repositorio (para nada es la soluci贸n). Pero definitivamente, si tienes un proyecto en el que cuentas con m谩s de un frontend, creo que es una buena idea migrar a un monorepo.

Peque帽a historia de por qu茅 llevamos Binary Coffee a monorepo

Al iniciar y teniendo como objetivo principal compartir contenido, iniciamos luego de una peque帽a investigaci贸n con strapi en el backend y angular en el frontend como tecnolog铆as core del proyecto. Todo fue de maravilla al principio, hasta que identificamos que no pod铆amos utilizar la administraci贸n de strapi para crear los contenidos, no porque no se pudiera, sino porque en esta administraci贸n se encuentran todas las configuraciones y par谩metros esenciales de la API, de tal manera que cualquiera sin desearlo podr铆a cambiar y BUM, adi贸s producci贸n.

Pues en este contexto se cre贸 otro frontend, para la administraci贸n del sitio. Algunos pueden discrepar con nosotros sobre porqu茅 no hacerlo sobre el mismo proyecto del frontend y la respuesta es sencilla, eran modelos y l贸gicas completamente distintas que no compart铆an mucho en com煤n y desde el punto de vista de un cliente, no era necesario que tuviera toda una administraci贸n atada a 茅l.

As铆 que finalmente todo qued贸: como frontend y admin-frontend. Pero r谩pidamente vimos que muchos de los peticiones y la estructura de ambas aplicaciones eran la misma y empezamos a copiar y pegar de uno a otro (no nos crucifiquen).

驴C贸mo se acab贸 la pesadilla del copia-pega en Binary Coffee?

Unimos los proyectos en un monorepo. Ahora contamos con los proyectos en un mismo repositorio, y una secci贸n de librer铆as con la cual todo aquello que identificamos como acciones comunes entre los proyectos, se llevan a una librer铆a, evitando el copia-pega y repetici贸n de c贸digo.

驴Qu茅 utilizamos para unir los proyectos en un monorepo?

Pues no crean ni por un segundo que esto fue, copia el proyecto pegalo y copia el otro y pegalo, y PUM ya tienes monorepo. No, no es as铆, para Angular contamos con una herramienta que se llama NRWL, que nos hace la vida completamente f谩cil. Esta herramienta cuenta con funciones que pueden convertir proyectos existentes en un monorepos o iniciar desde cero nuestro proyecto en un monorepo si sabes que en el futuro llegaremos a tener m谩s de un frontend en el proyecto.

Pero lo m谩s interesante de esta herramienta es que no solo es para Angular, tambi茅n lo podemos usar para React, Vue o simplemente una aplicaci贸n javascript nativa. He incluso m谩s, podemos unir en un solo monorepo a proyectos de diferentes tecnolog铆as. Pues s铆, como lo escuchas, ya puedes ligar tu proyecto React con el de Angular y con el de Vue y compartir librer铆a entre ellos. Definitivamente est谩 herramienta se merece un art铆culo para ella sola y no hablaremos mucho del tema, solo les dejaremos los enlaces para si desean echarle un ojo y probarla, por otra parte si quieren verla en acci贸n, pueden echarle un ojo al c贸digo de Binary Coffee frontend, que como mencionamos ya la estamos usando.

驴Existen herramientas similares para otros lenguajes?

Pues si, existen herramientas para tener nuestros proyectos en un monorepo. Si tienes curiosidad por ver algunas de ellas echale un vistazo a este link que contiene un buen listado de herramientas sobre el tema.

Adem谩s agregar, que muchas de las herramientas que usualmente utilizamos, tienen soporte para monorepos, como es el caso de git.

Conclusiones

  • Como mencionamos anteriormente, monorepo no es la soluci贸n a todos los problemas, pero es una buena soluci贸n a proyectos medianamente grandes donde quieres de manera f谩cil reutilizar c贸digo entre ellos.
  • No todo es color de rosas con el monorepo, actualmente enfrentamos problemas para identificar que proyecto fue el afectado con los cambios y en respuesta a ello solo desplegarlo y no as铆 con un despliegue generar de todos los proyectos en cada push. Pero ya estamos identificando maneras de resolver el problema y posiblemente pr贸ximamente compartiremos en un nuevo art铆culo c贸mo hicimos para esto.
  • De momento estamos contentos con los resultados, y vemos muchas ventajas en el uso de monorepos, con m谩s tiempo volveremos a dar un resumen y nuestras bien justificadas conclusiones.

Enlaces

Bueno, esto es todo, as铆 que ya sabes, deja en los comentarios tus opiniones y que crees sobre el tema.

Happy coding!

Opiniones