Nx

``

Concepto general

Nx es una plataforma de task orchestration y build system diseñada principalmente para trabajar con monorepo. Proporciona herramientas para escalar proyectos grandes, mejorar el rendimiento de builds y tests, y mantener una arquitectura consistente a lo largo del tiempo.

Nx no es solo un CLI, sino un ecosistema que combina:

  • Orquestación inteligente de tareas
  • Gestión avanzada de dependencias
  • Caché distribuido e incremental
  • Generación y estandarización de código
  • Integración nativa con flujos de CICD

Relación con Monorepo

Nx está profundamente orientado a la gestión de monorepo:

  • Permite alojar múltiples aplicaciones y librerías en un único repositorio.
  • Facilita la compartición de código común mediante librerías reutilizables.
  • Hace explícitas las dependencias entre proyectos internos.
  • Escala mejor que enfoques tradicionales al evitar builds y tests innecesarios.

Ver también:

  • monorepos guia basica
  • nx guia basica

Orquestación de tareas

La orquestación de tareas es uno de los pilares de Nx:

  • Ejecuta tareas (build, test, lint, e2e, etc.) respetando el grafo de dependencias.
  • Determina automáticamente el orden correcto de ejecución.
  • Permite ejecutar tareas en paralelo cuando no existen dependencias.
  • Optimiza pipelines locales y de CICD.

Ejemplos de tareas orquestadas:

  • build de aplicaciones dependientes de librerías
  • test solo de proyectos afectados por cambios
  • lint incremental

Grafo de dependencias

Nx construye un dependency graph del workspace:

  • Incluye aplicaciones, librerías y relaciones entre ellas.
  • Detecta dependencias explícitas e implícitas.
  • Es clave para calcular qué proyectos están afectados por un cambio.
  • Ayuda a mantener una arquitectura limpia y controlada.

Este grafo es la base de:

  • Caché inteligente
  • Affected commands
  • Optimización de pipelines

Caché inteligente

Nx incorpora un sistema de caché inteligente:

  • Cachea el resultado de tareas (build, test, lint).
  • Reutiliza resultados si los inputs no han cambiado.
  • Funciona tanto en local como de forma remota (Remote Cache).
  • Reduce drásticamente tiempos de ejecución en equipos y CI.

Beneficios principales:

  • Builds más rápidos
  • Menor consumo de recursos
  • Feedback más rápido para desarrolladores

Gestión de dependencias

Nx mejora la gestión de dependencias dentro del monorepo:

  • Controla dependencias entre librerías internas.
  • Permite definir reglas de dependencia (por ejemplo, capas).
  • Evita dependencias circulares o no deseadas.
  • Facilita refactors seguros a gran escala.

Relacionado con:

Generación de código

Nx ofrece code generation mediante generators:

  • Genera aplicaciones, librerías y componentes.
  • Aplica convenciones y buenas prácticas automáticamente.
  • Reduce errores humanos y trabajo repetitivo.
  • Facilita la adopción de estándares de arquitectura.

Los generators pueden ser:

  • Oficiales de Nx
  • Específicos de frameworks (Angular, React, etc.)
  • Personalizados por el equipo

Testing

Nx está estrechamente integrado con Testing:

  • Ejecuta tests solo en proyectos afectados.
  • Orquesta distintos tipos de tests (unitarios, integración, e2e).
  • Integra herramientas comunes del ecosistema.
  • Optimiza el tiempo total de ejecución en CI.

Compartir código común

Nx promueve la creación de librerías compartidas:

  • Centraliza lógica común (UI, dominio, utilidades).
  • Facilita la reutilización entre múltiples aplicaciones.
  • Reduce duplicación de código.
  • Mejora la mantenibilidad a largo plazo.

Las librerías pueden organizarse por:

  • Dominio
  • Tipo (UI, data-access, utils)
  • Capas arquitectónicas

Automatización y CI/CD

Nx encaja de forma natural con flujos de CICD:

  • Calcula automáticamente qué tareas ejecutar en cada pipeline.
  • Reduce tiempos de CI al evitar trabajo innecesario.
  • Facilita pipelines más simples y deterministas.
  • Compatible con sistemas de caché remota compartida.

Relacionado con:

  • CICD
  • Automatizacion

Documentación relevante

Guías y referencias

  • Why Nx-why-nx
  • Nx Monorepo Angular-nx-monorepo-angular-e6bd090b7e1a
  • nx guia basica

Casos de uso habituales

  • Monorepos con múltiples aplicaciones frontend y backend
  • Equipos grandes con necesidad de escalar builds y tests
  • Proyectos que requieren fuerte control arquitectónico
  • Organizaciones que buscan optimizar tiempos de CI

Nx — Conceptos Avanzados y Temas Complementarios

Affected Commands

Nx introduce el concepto de affected commands para optimizar ejecuciones:

  • Determina qué proyectos se ven impactados por un cambio en el código.
  • Se basa en el grafo de dependencias y el historial de Git.
  • Evita ejecutar tareas en proyectos no afectados.

Ejemplos de uso:

  • nx affected:test
  • nx affected:build
  • nx affected:lint

Este enfoque es clave para monorepos grandes y pipelines eficientes de CICD.

Inputs y Outputs de tareas

Nx define cada tarea en términos de inputs y outputs:

  • Inputs: archivos, configuraciones y dependencias que influyen en el resultado.
  • Outputs: artefactos generados por la tarea.
  • Permiten invalidar o reutilizar caché con precisión.

Esto garantiza:

  • Reproducibilidad
  • Caché determinista
  • Menos falsos positivos al recalcular tareas

Task Pipelines

Nx permite definir pipelines de tareas:

  • Describe cómo una tarea depende de otras.
  • Se configuran en nx.json.
  • Permite herencia y reutilización de configuraciones.

Casos comunes:

  • build depende de build de librerías
  • test depende de build
  • lint independiente y paralelizable

Plugins de Nx

Nx es extensible mediante plugins:

  • Añaden soporte para frameworks, herramientas o flujos específicos.
  • Incluyen generators, executors y presets.
  • Permiten adaptar Nx a necesidades concretas del equipo.

Tipos de plugins:

  • Oficiales
  • De la comunidad
  • Internos (custom plugins)

Executors

Los executors definen cómo se ejecuta una tarea:

  • Encapsulan lógica de ejecución (build, test, deploy).
  • Pueden ser reutilizados por múltiples proyectos.
  • Son configurables y extensibles.

Ventajas:

  • Separación entre configuración y ejecución
  • Consistencia entre proyectos
  • Facilitan automatización avanzada

Nx Cloud

Nx Cloud extiende las capacidades de Nx:

  • Caché remoto compartido entre desarrolladores y CI.
  • Distribución de tareas entre agentes.
  • Visualización avanzada de pipelines.

Beneficios principales:

  • Reducción significativa de tiempos de CI
  • Escalabilidad horizontal
  • Mejor feedback para equipos grandes

Distribución de tareas

Nx soporta task distribution:

  • Ejecuta tareas en paralelo en múltiples máquinas.
  • Ideal para test suites grandes.
  • Se integra con Nx Cloud y sistemas de CI modernos.

Esto permite:

  • Escalar pipelines sin complejidad adicional
  • Aprovechar mejor la infraestructura disponible

Control de arquitectura

Nx permite imponer restricciones arquitectónicas:

  • Reglas de dependencia entre librerías.
  • Validación automática durante linting.
  • Prevención de accesos indebidos entre capas.

Casos típicos:

  • UI no depende de data-access
  • Dominios aislados entre sí
  • Core independiente de apps

Versionado y releases

Nx facilita el versionado en monorepos:

  • Versionado independiente o unificado.
  • Automatización de releases.
  • Integración con changelogs y tags.

Es especialmente útil en:

  • Librerías compartidas
  • Plataformas internas
  • Ecosistemas con múltiples consumidores

Migraciones

Nx incluye soporte para migraciones:

  • Actualiza configuraciones y dependencias de forma segura.
  • Aplica cambios incrementales y reproducibles.
  • Reduce riesgo en upgrades grandes.

Las migraciones:

  • Son versionadas
  • Son auditables
  • Mantienen compatibilidad progresiva

Workspaces heterogéneos

Nx no se limita a un solo stack:

  • Permite mezclar múltiples tecnologías en un mismo monorepo.
  • Gestiona dependencias cruzadas entre stacks.
  • Unifica flujos de build y test.

Ejemplos:

  • Frontend y backend en el mismo repositorio
  • Herramientas internas junto a aplicaciones productivas

Observabilidad del workflow

Nx ofrece visibilidad sobre el estado del workspace:

  • Visualización del dependency graph.
  • Inspección de tareas y pipelines.
  • Diagnóstico de cuellos de botella.

Esto ayuda a:

  • Optimizar arquitectura
  • Detectar dependencias innecesarias
  • Mejorar rendimiento global

Seguridad y control de cambios

Nx contribuye a la seguridad del desarrollo:

  • Limita el impacto de cambios accidentales.
  • Reduce superficie de error en CI.
  • Facilita auditorías de dependencias internas.

Relacionado con: