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
NPM
11

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.

Código del tema: workspaces

📘 Teoría

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.

Configurar workspace
{
  "name": "mi-monorepo",
  "workspaces": [
    "packages/*"
  ]
}

Crear un paquete dentro del workspace

Cada paquete tiene su propio package.json.

1

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.

2

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.

Paquete en workspace
# packages/utils/package.json
{
  "name": "@mi-monorepo/utils",
  "version": "1.0.0"
}

# packages/components/package.json
{
  "name": "@mi-monorepo/components",
  "dependencies": {
    "@mi-monorepo/utils": "*"
  }
}

Scripts en workspaces

Ejecutar scripts en todos los paquetes.

1

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.

2

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.

Scripts con workspaces
# Ejecutar test solo en un paquete
npm run test -w @mi-monorepo/utils

# Ejecutar build en todos los paquetes
npm run build --workspaces

# Ejecutar en todos los paquetes del workspace
npm install -w packages/utils

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

🧪 Aprende probando

Ejemplo Ejemplo: crear un workspace básico Configura un workspace con dos paquetes.

🏁 Retos

Reto Reto 1: Configurar workspaces Crea un workspace con dos paquetes.
Reto Reto 2: Dependencias entre paquetes Configura que un paquete dependa del otro.

🧰 Recursos

Test

Comprueba tus conocimientos con un test sobre NPM.

Test de NPM

¿Qué es esto?

Soy Cristian Eslava y a veces hago webs para procrastinar yo y vosotros 😉.

Esta la hice en febrero de 2026 para facilitar el aprendizaje de mis alumnxs. Aprender desarrollo web practicando. La idea es que crezca semanalmente con nuevos temas, tests y retos.

Inspirado en MDN, en W3Schools, en Codepen, en el crack de Manz y en mil sitios de documentación sobre desarrollo web. Quería aportar además de bloques teóricos con ejemplos, la gamificación de los retos y el sistema de test que ya tenía en culTest .

Si te gustó, si no te gustó, si quieres saludarme, o invitarme a 🍻 no dudes en escribirme en cristianeslava@gmail.com .