Desarrolladores

node_modules por todas partes: cómo encontrarlas, limpiarlas y recuperarlas

Encuentra todas las carpetas node_modules de tu Mac con su tamaño, borra las que no necesitas, reinstala desde el lockfile y vacía las cachés de paquetes.

5 min de lecturaPor el equipo de MoreRoom, Yando Pte. Ltd.Esta página en Markdown

En resumen

  • Borrar node_modules es seguro siempre que conserves package.json y el lockfile; npm ci o pnpm install recuperan exactamente las mismas versiones.
  • find con -prune muestra todas las carpetas node_modules de tu carpeta de inicio con su tamaño, sin entrar en las anidadas.
  • npx npkill te permite recorrer las carpetas node_modules y borrarlas de forma interactiva, pero las borra al momento, sin pasar por la Papelera.
  • Con pnpm, los archivos de node_modules son clones o enlaces físicos de un almacén compartido, así que borrarlos libera poco hasta que ejecutas pnpm store prune.
  • Las carpetas de compilación como .next, .turbo, .nuxt, .svelte-kit y .parcel-cache se regeneran solas y también se pueden eliminar sin riesgo.

Cómo encontrar y limpiar carpetas node_modules en un Mac

  1. Muestra las carpetas node_modules con su tamaño. Ejecuta un comando find sobre tu carpeta de inicio que omita ~/Library y la Papelera, se detenga en cada node_modules de primer nivel y pase los resultados a du -sh.
  2. Elige los proyectos en los que no estás trabajando. Comprueba que cada proyecto tiene package.json y un lockfile como package-lock.json, pnpm-lock.yaml, yarn.lock o bun.lock. Conserva esos archivos.
  3. Borra sus carpetas node_modules. Traslada cada carpeta node_modules a la Papelera desde el Finder, o bórralas de forma interactiva con npx npkill, que las elimina definitivamente.
  4. Vacía las cachés de los gestores de paquetes. Ejecuta npm cache clean --force, pnpm store prune, yarn cache clean o bun pm cache rm según los gestores de paquetes que uses.
  5. Reinstala cuando vuelvas a un proyecto. Ejecuta npm ci, pnpm install, yarn install o bun install en la carpeta del proyecto para restaurar node_modules a partir del lockfile.

Una carpeta node_modules contiene las dependencias instaladas para un proyecto de JavaScript o TypeScript, y una típica ocupa unos cientos de megabytes. Con decenas de proyectos antiguos, suman fácilmente decenas de gigabytes. Se pueden borrar sin riesgo siempre que conserves package.json y el lockfile: tu gestor de paquetes reinstala las mismas versiones cuando vuelves al proyecto.

Encuentra todas las carpetas node_modules y su tamaño

Este comando busca en tu carpeta de inicio, omite ~/Library y la Papelera, y muestra cada carpeta node_modules con su tamaño, con las más grandes al final:

find ~ \( -path "$HOME/Library" -o -path "$HOME/.Trash" \) -prune -o -type d -name node_modules -prune -print0 2>/dev/null | xargs -0 du -sh 2>/dev/null | sort -h

Cómo funciona: el primer -prune omite las dos carpetas excluidas, -type d -name node_modules localiza las carpetas y el segundo -prune impide que find entre en ellas, de modo que las node_modules anidadas se cuentan una sola vez, dentro de su carpeta superior. du -sh mide cada una y sort -h ordena la lista. Solo lee. En una carpeta de inicio grande puede tardar unos minutos, y puede que Terminal pida acceso a Documentos, Escritorio o Descargas.

Ignora los resultados que estén dentro de carpetas de herramientas como ~/.nvm, ~/.vscode o ~/.cursor. Pertenecen a herramientas instaladas y extensiones de editores, no a tus proyectos.

Si tus proyectos usan pnpm, los tamaños que aparecen son mayores que lo que recuperarías. Más abajo se explica por qué.

Borra las que no necesitas

Antes de borrar, abre la carpeta del proyecto y comprueba que tiene un lockfile: package-lock.json (npm), pnpm-lock.yaml (pnpm), yarn.lock (Yarn) o bun.lock / bun.lockb (Bun). Consérvalo, y conserva también package.json.

La forma más segura de borrar es arrastrar node_modules a la Papelera en el Finder. Puedes cambiar de opinión hasta que vacíes la Papelera. Con muchos archivos pequeños, trasladarlos a la Papelera lleva un momento.

Desde Terminal, dentro de la carpeta de un proyecto:

cd ~/Projects/old-app
rm -rf node_modules

rm -rf borra definitivamente, sin pasar por la Papelera. Comprueba antes en qué carpeta estás con pwd, y no lo ejecutes nunca con un comodín ni con una variable vacía.

npkill: una alternativa interactiva

npkill muestra las carpetas node_modules con su tamaño y te permite borrarlas de una en una con una sola tecla:

npx npkill -d ~/Projects

-d indica dónde empieza la búsqueda; sin esta opción, npkill empieza en la carpeta actual. Muévete con las flechas y pulsa Espacio o Supr para borrar la carpeta seleccionada. npkill borra al momento, sin pasar por la Papelera. Marca con ⚠️ las carpetas que necesitan las apps para funcionar, que conviene dejar en paz. --dry-run simula el borrado si quieres probarlo antes.

Reinstala cuando vuelvas a un proyecto

Usa el comando que instala exactamente lo que indica el lockfile:

Gestor de paquetes Lockfile Reinstalar
npm package-lock.json npm ci
pnpm pnpm-lock.yaml pnpm install --frozen-lockfile
Yarn (Berry) yarn.lock yarn install --immutable
Yarn Classic yarn.lock yarn install --frozen-lockfile
Bun bun.lock bun install --frozen-lockfile

npm ci exige un lockfile, elimina antes cualquier node_modules existente y nunca modifica package.json ni el lockfile. Un npm install normal también funciona, pero puede actualizar el lockfile.

Otras carpetas que se regeneran solas

Los frameworks y las herramientas de compilación guardan cachés y resultados junto a node_modules. Se pueden borrar sin riesgo en los proyectos que no estás ejecutando; la siguiente compilación o el servidor de desarrollo los vuelven a crear.

Carpeta La crea
.next Next.js
.nuxt Nuxt
.svelte-kit SvelteKit
.turbo Turborepo
.parcel-cache Parcel
.angular Angular CLI

dist y build también suelen ser resultados de compilación, pero son nombres genéricos. Algunos proyectos guardan ahí archivos versionados o los usan para otra cosa, así que mira dentro antes de borrar.

Para ver las cachés de frameworks de una carpeta de proyectos:

find ~/Projects -type d \( -name .next -o -name .nuxt -o -name .svelte-kit -o -name .turbo -o -name .parcel-cache \) -prune -print0 | xargs -0 du -sh | sort -h

Vacía las cachés globales de paquetes

Cada gestor de paquetes guarda además una caché de descargas que comparten todos los proyectos. Vaciarla es definitivo pero inofensivo: los paquetes se vuelven a descargar cuando hacen falta.

npm cache clean --force
pnpm store prune
yarn cache clean
bun pm cache rm
  • npm guarda su caché en ~/.npm/_cacache. La documentación de la caché de npm explica por qué clean necesita --force e indica que npm cache verify hace una recolección de elementos no usados sin vaciarlo todo. Los paquetes que descarga npx están en ~/.npm/_npx.
  • pnpm guarda su almacén en ~/Library/pnpm/store en macOS (pnpm store path muestra el tuyo). pnpm store prune elimina solo los paquetes a los que no hace referencia ningún proyecto, y la documentación de pnpm recomienda ejecutarlo de vez en cuando, no continuamente.
  • Yarn Classic guarda la caché en ~/Library/Caches/Yarn. Con Yarn Berry, yarn cache clean --mirror vacía la caché global de ~/.yarn/berry/cache.
  • Bun guarda la caché en ~/.bun/install/cache; bun pm cache rm la vacía.

Las versiones antiguas de Node.js instaladas con nvm también se acumulan en ~/.nvm/versions/node; nvm uninstall <versión> elimina la que ya no necesites.

Por qué pnpm libera menos de lo que indica du

npm y Yarn Classic copian cada paquete en el node_modules de cada proyecto. pnpm guarda cada paquete una sola vez, en un almacén direccionable por contenido, y enlaza sus archivos en cada proyecto que lo usa. En macOS, el packageImportMethod por defecto de pnpm intenta primero usar clones APFS y, si no, enlaces físicos.

npm copia los paquetes en cada proyecto, mientras que pnpm comparte un único almacén mediante clones o enlaces físicos

En ambos casos, los bytes se comparten. du sigue contando el tamaño completo en cada proyecto, así que borrar el node_modules de un proyecto de pnpm suele liberar mucho menos de lo que indicaba. El espacio vuelve cuando pnpm store prune elimina los paquetes que no usa ninguno de los proyectos restantes. Para que esto funcione, el almacén tiene que estar en el mismo disco que el proyecto; los proyectos que están en un disco externo tienen allí su propio almacén.

Cómo te ayuda MoreRoom

La versión gratuita de MoreRoom encuentra las carpetas node_modules de los proyectos que tienen un lockfile y no se han tocado en 30 días, además de cachés de frameworks como .next y .turbo, y las marca como “Seguro de eliminar”. Omite ~/Library y las carpetas de herramientas como ~/.nvm y ~/.vscode. Tú trasladas los elementos a la Papelera de uno en uno, con Deshacer. Para la caché de npm y el almacén de pnpm, MoreRoom ejecuta npm cache clean --force y pnpm store prune; esos comandos son definitivos y así se indica.

MoreRoom Pro añade la hibernación de proyectos: los proyectos inactivos se deshacen de las carpetas que se pueden regenerar, como node_modules y los resultados de compilación, y se despiertan con un clic cuando vuelves a ellos. Pro incluye también el Colector y el modo objetivo.

Preguntas frecuentes

¿Es seguro borrar node_modules?

Sí. Solo contiene las dependencias instaladas, que tu gestor de paquetes puede volver a instalar a partir de package.json y del lockfile. Bórrala solo en proyectos que no estés ejecutando en ese momento, y conserva el lockfile.

¿Debo borrar también package-lock.json?

No. El lockfile registra las versiones exactas que funcionaban. Consérvalo para que npm ci, pnpm install o yarn install puedan recrear más adelante el mismo node_modules.

¿Por qué borrar node_modules en un proyecto de pnpm libera tan poco espacio?

pnpm guarda una sola copia de cada paquete en un almacén compartido y la clona o enlaza con enlaces físicos en cada proyecto. Borrar el node_modules de un proyecto solo elimina los enlaces; después, pnpm store prune borra los paquetes que ningún proyecto usa.

¿Es seguro npm cache clean --force?

Sí. Vacía la caché de descargas de npm en ~/.npm/_cacache, y npm vuelve a descargar los paquetes cuando hace falta. La documentación de npm indica que vaciar la caché solo sirve para recuperar espacio en disco.

¿npkill traslada las carpetas a la Papelera?

No. npkill borra las carpetas seleccionadas al momento. Usa su opción --dry-run para hacer un ensayo, y el Finder si quieres la Papelera como red de seguridad.

Carpetas que aparecen en esta guía