Workspaces: gestionar múltiples paquetes desde un repositorio
Los workspaces de npm te permiten gestionar múltiples paquetes desde un único repositorio. Aprende a estructurar proyectos mono-repo, compartir código entre paquetes y optimizar el flujo de desarrollo.
Cuando tienes múltiples paquetes que dependen unos de otros, gestionar las versiones y los enlaces puede convertirse en un caos. Los workspaces de npm resuelven este problema permitiendo que un único package.json gestione múltiples paquetes.
En esta lección vas a aprender a configurar workspaces, crear paquetes dentro del workspace, gestionar dependencias entre ellos y estructurar proyectos mono-repo de forma profesional.
Al terminar, podrás crear y gestionar proyectos con múltiples paquetes interrelacionados de forma eficiente.
- Un mono-repo dentro de npm.
- Los workspaces te permiten tener múltiples paquetes dentro de un único repositorio. En lugar de publicar paquetes individualmente y depender de ellos vía npm registry, los desarrollas localmente y npm crea enlaces simbólicos automáticamente.
- Esto es ideal cuando tienes una librería base que usan otros paquetes de tu proyecto, o cuando divides una aplicación grande en paquetes más pequeños y reutilizables.
- Un único package.json gestiona varios paquetes
- Las dependencias se instalan en la raíz
Qué son los workspaces
Un mono-repo dentro de npm.
Los workspaces te permiten tener múltiples paquetes dentro de un único repositorio. En lugar de publicar paquetes individualmente y depender de ellos vía npm registry, los desarrollas localmente y npm crea enlaces simbólicos automáticamente.
Esto es ideal cuando tienes una librería base que usan otros paquetes de tu proyecto, o cuando divides una aplicación grande en paquetes más pequeños y reutilizables.
- Un único package.json gestiona varios paquetes
- Las dependencias se instalan en la raíz
- Los paquetes se enlazan automáticamente
- Simplifica el desarrollo local
Configurar workspaces en package.json
Declarar los paquetes del workspace.
Para configurar workspaces, añade el campo 'workspaces' en el package.json de la raíz. Es un array de patrones que indican dónde están los paquetes: ['packages/*'] busca en todas las subcarpetas de packages, o puedes especificar rutas individuales.
Una vez configurado, npm install en la raíz instala todas las dependencias de todos los paquetes, y crea enlaces simbólicos para que los paquetes del workspace dependan unos de otros.
Crear un paquete dentro del workspace
Cada paquete tiene su propio package.json.
Cada paquete dentro del workspace es un paquete npm normal con su propio package.json. La diferencia es que las dependencias entre paquetes del workspace se resuelven automáticamente.
Para que el paquete A use el paquete B, simplemente añade 'B' a las dependencias de A. npm detectará que B está en el mismo workspace y creará un enlace simbólico.
Scripts en workspaces
Ejecutar scripts en todos los paquetes.
Una ventaja poderosa de los workspaces es la opción -w (workspace flag) para ejecutar scripts en paquetes específicos, o --workspaces para ejecutarlos en todos los paquetes.
Por ejemplo, 'npm run test -w @mi-monorepo/utils' ejecuta los tests solo en utils. 'npm run build --workspaces' ejecuta build en todos los paquetes.
Buenas prácticas con workspaces
Estructura recomendada para proyectos.
Mantén una estructura clara: packages/ para los paquetes, scripts/ para herramientas compartidas, y config/ para configuración. Esto hace que el proyecto sea fácil de navegar.
Usa el scoped name para tus paquetes: @mi-organizacion/nombre-paquete. Esto evita conflictos con paquetes públicos del registry.
- packages/: paquetes del workspace
- Usa scoped names (@org/package)
- Comparte dependencias comunes en raíz
- Scripts de build en cada paquete