Hace un par de meses, casi medio año atrás, se introdujo un producto independiente para reutilizar la estructura de NX. Por lo general, no nos gustan las carpetas de aplicaciones y bibliotecas, pero para un producto independiente, tienes una carpeta de origen en la raíz. Y hay un generador para eso, donde puedes agregar, por ejemplo, para Node, un conjunto predefinido de Node independiente y no generaría la configuración normal de Node para
monorepos, sino que generaría solo una aplicación Node única con
Fastify, Express o Coa. Tenemos un par de plantillas que simplemente te facilitan el inicio. Y la estructura se ve así. Entonces, puedes ver aquí que hay una carpeta de origen, hay una aplicación aquí, a la que ya le he agregado algunas características que son, nuevamente, por dominio. Entonces tenemos los pedidos, tenemos los detalles del producto, la lista de productos, cosas así. Y un enfoque obvio que ya tienes en un
monorepo, tienes una aplicación y varias bibliotecas, pero puedes tomar ese mismo enfoque para modularizar también tu aplicación independiente, ¿verdad? Por lo tanto, podemos seguir adelante y, en lugar de tener solo ese código monolítico donde tienes solo carpetas, puedes extraerlos y crear bibliotecas locales separadas. Ahora las llamo bibliotecas locales porque no las vamos a publicar, ¿verdad? Pero tienen su propia configuración, su propio proceso de compilación, sus propias pruebas. Y así puedes extraer esa lógica en partes más modulares allí. ¿Cuál es la ventaja? Bueno, en primer lugar, estas están más encapsuladas porque cada una de estas bibliotecas, por ejemplo, viene con un archivo index.js, que es tu punto de entrada público, si quieres, tu API pública hacia el mundo exterior dentro de ese proyecto único. Aquí, por ejemplo, estoy exponiendo las rutas para esa biblioteca, por lo que esta es mi biblioteca de pedidos, por ejemplo, y luego puedo tener más facilidades internamente. Tal vez tenga una función dedicada para cada manejo de ruta y así sucesivamente, como aquí puedes agregar básicamente lo que necesites en tu proyecto. Pero ya puedes ver cómo esto está modularizado. Ahora esta es una aplicación
Fastify, eso es solo porque
Fastify tiene, en realidad, uso este ejemplo porque
Fastify tiene algunos mecanismos incorporados que funcionan muy bien con la modularización. Y Matteo Collina en realidad tiene una charla más profunda sobre
Fastify hoy, creo que es una de las últimas charlas, así que definitivamente deberías ver eso, donde él profundizará más en
Fastify y por qué ya tiene esa modularidad incorporada. Pero puedes usarlo con Express, como se mencionó, con COA y todos los demás
frameworks de Node también. Y luego, en el nivel superior, en este caso
Fastify, todo lo que haces es simplemente importar esa biblioteca, ¿verdad? Entonces puedes ver que esto tiene un alcance de
NPM y luego registrarlo con
Fastify. Ahora probablemente haya una mejor manera de hacerlo, no soy un experto en
Fastify, así que tal vez Matteo revele alguna mejor manera de cargarlo dinámicamente, por ejemplo,
Fastify tiene propiedades de carga automática. Pero es la forma en que lo conectas. Entonces, la aplicación en realidad se vuelve muy liviana. Ahora puedes preguntarte por qué o cómo puedo importar eso en mi aplicación de nodo, slash, módulos y así sucesivamente. La razón es porque en Nx, por ejemplo, cuando creas una biblioteca de este tipo, ya proporcionamos tipos de mapeo de ruta, por lo que la importación es mucho más agradable, no tienes importaciones relativas extrañas a alguna ubicación dentro de tu proyecto. Esto es solo, nuevamente, por la ergonomía del desarrollador. Entonces, lo que obtenemos es una estructura casi como esta, donde la aplicación de nodo es nuestra aplicación, y las partes que extraemos se vuelven casi independientes. No podemos ejecutarlos solos, pero están integrados en la aplicación, que los agrupa. Por lo tanto, tu aplicación realmente se convierte en el contenedor de empaquetado, la parte de despliegue, porque al final, cuando implementas la aplicación, eso es lo que construiste, se incluirá y compilará los módulos, y luego los enviarás a algún lugar en tu servidor. Pero podemos ir más allá y modularizar esas bibliotecas locales
Comments