In breve
- Eliminare node_modules è sicuro se conservi package.json e il lockfile; npm ci o pnpm install riportano esattamente le stesse versioni.
- find con -prune elenca ogni cartella node_modules della cartella Inizio con la sua dimensione, senza entrare in quelle annidate.
- npx npkill ti fa sfogliare le cartelle node_modules ed eliminarle in modo interattivo, ma le elimina subito, senza passare dal Cestino.
- Con pnpm, i file in node_modules sono cloni o hard link di uno store condiviso, quindi eliminarli libera poco finché non esegui pnpm store prune.
- Anche le cartelle di build come .next, .turbo, .nuxt, .svelte-kit e .parcel-cache vengono ricreate automaticamente e si possono rimuovere senza rischi.
Come trovare e ripulire le cartelle node_modules su un Mac
- Elenca le cartelle node_modules con le loro dimensioni. Esegui sulla cartella Inizio un comando find che salta ~/Library e il Cestino, si ferma a ogni node_modules di primo livello e passa i risultati a du -sh.
- Scegli i progetti su cui non stai lavorando. Controlla che ogni progetto abbia package.json e un lockfile come package-lock.json, pnpm-lock.yaml, yarn.lock o bun.lock. Conserva questi file.
- Elimina le loro cartelle node_modules. Sposta ogni cartella node_modules nel Cestino dal Finder, oppure eliminale in modo interattivo con npx npkill, che le rimuove definitivamente.
- Svuota le cache dei gestori di pacchetti. Esegui npm cache clean --force, pnpm store prune, yarn cache clean o bun pm cache rm per i gestori di pacchetti che usi.
- Reinstalla quando torni a un progetto. Esegui npm ci, pnpm install, yarn install o bun install nella cartella del progetto per ripristinare node_modules dal lockfile.
Una cartella node_modules contiene le dipendenze installate per un singolo progetto JavaScript o TypeScript, e di solito pesa qualche centinaio di megabyte. Con decine di vecchi progetti, arrivano facilmente a decine di gigabyte. Si possono eliminare senza rischi, purché tu conservi package.json e il lockfile: il gestore di pacchetti reinstalla le stesse versioni quando torni al progetto.
Trovare tutte le cartelle node_modules e la loro dimensione
Questo comando cerca nella cartella Inizio, salta ~/Library e il Cestino, e stampa ogni cartella node_modules con la sua dimensione, con le più grandi in fondo:
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
Come funziona: il primo -prune salta le due cartelle escluse, -type d -name node_modules individua le cartelle, e il secondo -prune impedisce a find di entrarvi, così le node_modules annidate vengono contate una sola volta, dentro quella che le contiene. du -sh misura ciascuna e sort -h ordina l’elenco. Si limita a leggere. Su una cartella Inizio molto grande può richiedere qualche minuto, e il Terminale potrebbe chiedere l’accesso a Documenti, Scrivania o Download.
Ignora i risultati all’interno delle cartelle di strumenti come ~/.nvm, ~/.vscode o ~/.cursor. Appartengono a strumenti installati e a estensioni degli editor, non ai tuoi progetti.
Se i tuoi progetti usano pnpm, le dimensioni mostrate sono maggiori di quelle che recupereresti. Il motivo è spiegato più avanti.
Eliminare quelle che non ti servono
Prima di eliminare, apri la cartella del progetto e controlla che contenga un lockfile: package-lock.json (npm), pnpm-lock.yaml (pnpm), yarn.lock (Yarn) o bun.lock / bun.lockb (Bun). Conservalo, e conserva package.json.
Il modo più sicuro per eliminare è trascinare node_modules nel Cestino dal Finder. Puoi cambiare idea finché non svuoti il Cestino. Con molti file piccoli, lo spostamento nel Cestino richiede qualche istante.
Dal Terminale, all’interno della cartella di un progetto:
cd ~/Projects/old-app
rm -rf node_modules
rm -rf elimina definitivamente, senza passare dal Cestino. Controlla prima con pwd la cartella in cui ti trovi e non eseguirlo mai con un carattere jolly o una variabile vuota.
npkill: un’alternativa interattiva
npkill elenca le cartelle node_modules con le loro dimensioni e ti permette di eliminarle con un tasto alla volta:
npx npkill -d ~/Projects
-d indica da dove parte la ricerca; senza, npkill parte dalla cartella corrente. Spostati con i tasti freccia e premi Spazio o Canc per eliminare la cartella selezionata. npkill elimina subito, senza passare dal Cestino. Contrassegna con ⚠️ le cartelle necessarie al funzionamento delle app, che è meglio lasciare stare. --dry-run simula l’eliminazione se vuoi prima fare una prova.
Reinstallare quando torni a un progetto
Usa il comando che installa esattamente ciò che indica il lockfile:
| Gestore di pacchetti | Lockfile | Reinstallazione |
|---|---|---|
| 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 richiede un lockfile, rimuove prima l’eventuale node_modules esistente e non modifica mai package.json né il lockfile. Funziona anche un semplice npm install, che però potrebbe aggiornare il lockfile.
Altre cartelle che si ricreano da sole
Framework e strumenti di build conservano cache e output accanto a node_modules. Si possono eliminare senza rischi nei progetti che non stai eseguendo; la build successiva o il server di sviluppo li ricreano.
| Cartella | Creata da |
|---|---|
.next |
Next.js |
.nuxt |
Nuxt |
.svelte-kit |
SvelteKit |
.turbo |
Turborepo |
.parcel-cache |
Parcel |
.angular |
Angular CLI |
Anche dist e build contengono di solito l’output della build, ma sono nomi generici. Alcuni progetti vi salvano file sotto controllo di versione o li usano per altro, quindi guarda cosa contengono prima di eliminarli.
Per elencare le cache dei framework in una cartella di progetti:
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
Svuotare le cache globali dei pacchetti
Ogni gestore di pacchetti conserva anche una cache dei download condivisa da tutti i progetti. Svuotarla è definitivo ma innocuo: i pacchetti vengono scaricati di nuovo quando servono.
npm cache clean --force
pnpm store prune
yarn cache clean
bun pm cache rm
- npm tiene la sua cache in
~/.npm/_cacache. La documentazione di npm cache spiega perchécleanrichiede--forcee ricorda chenpm cache verifyfa garbage collection senza svuotare tutto. I pacchetti scaricati danpxsi trovano in~/.npm/_npx. - pnpm tiene il suo store in
~/Library/pnpm/storesu macOS (pnpm store pathmostra il tuo).pnpm store prunerimuove solo i pacchetti a cui nessun progetto fa riferimento, e la documentazione di pnpm consiglia di eseguirlo di tanto in tanto, non di continuo. - Yarn Classic usa come cache
~/Library/Caches/Yarn. Con Yarn Berry,yarn cache clean --mirrorsvuota la cache globale in~/.yarn/berry/cache. - Bun usa come cache
~/.bun/install/cache;bun pm cache rmla svuota.
Anche le vecchie versioni di Node.js installate con nvm si accumulano in ~/.nvm/versions/node; nvm uninstall <version> rimuove quella che non ti serve più.
Perché pnpm libera meno di quanto dice du
npm e Yarn Classic copiano ogni pacchetto nella node_modules di ciascun progetto. pnpm salva ogni pacchetto una sola volta, in uno store indirizzato per contenuto, e ne collega i file in ogni progetto che lo usa. Su macOS, il packageImportMethod predefinito di pnpm prova prima i cloni APFS, poi gli hard link.
In entrambi i casi, i byte sono condivisi. du conta comunque l’intera dimensione in ogni progetto, quindi eliminare la node_modules di un progetto pnpm di solito libera molto meno di quanto indicato. Lo spazio torna quando pnpm store prune rimuove i pacchetti che nessuno dei progetti rimasti usa. Perché funzioni, lo store deve trovarsi sullo stesso disco del progetto; i progetti su un disco esterno hanno lì il proprio store.
Come ti aiuta MoreRoom
La versione gratuita di MoreRoom trova le cartelle node_modules dei progetti che hanno un lockfile e non vengono toccati da 30 giorni, oltre alle cache dei framework come .next e .turbo, e le contrassegna come «Rimozione sicura». Salta ~/Library e le cartelle di strumenti come ~/.nvm e ~/.vscode. Sposti gli elementi nel Cestino uno alla volta, con Annulla. Per la cache di npm e lo store di pnpm, MoreRoom esegue npm cache clean --force e pnpm store prune; quei comandi sono definitivi e vengono segnalati come tali.
MoreRoom Pro aggiunge l’ibernazione dei progetti: i progetti inattivi perdono le cartelle ricreabili come node_modules e l’output di build, e si risvegliano con un clic quando ci torni. Pro include anche il Raccoglitore e la modalità obiettivo.
Domande frequenti
È sicuro eliminare node_modules?
Sì. Contiene solo le dipendenze installate, che il gestore di pacchetti può reinstallare da package.json e dal lockfile. Eliminala solo per i progetti che non stai eseguendo e conserva il lockfile.
Devo eliminare anche package-lock.json?
No. Il lockfile registra le versioni esatte che funzionavano. Conservalo, così npm ci, pnpm install o yarn install potranno ricreare in seguito la stessa node_modules.
Perché eliminare node_modules in un progetto pnpm libera così poco spazio?
pnpm conserva una sola copia di ogni pacchetto in uno store condiviso e clona quei file, o crea hard link, in ogni progetto. Eliminare la node_modules di un progetto rimuove solo i collegamenti; pnpm store prune elimina poi i pacchetti che nessun progetto usa.
npm cache clean --force è sicuro?
Sì. Svuota la cache dei download di npm in ~/.npm/_cacache, e npm scarica di nuovo i pacchetti quando servono. La documentazione di npm precisa che svuotare la cache è utile solo per recuperare spazio su disco.
npkill sposta le cartelle nel Cestino?
No. npkill elimina subito le cartelle selezionate. Usa l’opzione --dry-run per fare una prova, e il Finder se vuoi il Cestino come rete di sicurezza.