Come liberare spazio da node_modules, cache e build

Il disco è pieno e non hai salvato niente di grosso? Se programmi, è probabile che decine di gigabyte siano cartelle di build e dipendenze di progetti che non apri da mesi. Si possono cancellare: vediamo quali e come.

· 3 min di lettura · Enrico Fanucchi

In breve: le cartelle che un comando ricrea da solo si possono cancellare: node_modules (lo rifà npm install), target di Rust (cargo build), DerivedData di Xcode, le cartelle build e le cache di npm, pip, Gradle e Homebrew. Per trovarle tutte e cancellarle in sicurezza c'è TreeX: treex dev ~ le elenca, treex clean le sposta nel Cestino.

Dove finisce lo spazio

Ogni progetto si porta dietro cartelle che non sono codice tuo, ma copie scaricate o file generati dal compilatore. Le più pesanti:

CartellaEcosistemaCome si ricrea
node_modulesNode.js (npm, pnpm, yarn)npm install
targetRust (e Maven)cargo build
~/Library/Developer/Xcode/DerivedDataXcodealla prossima compilazione
build, .dart_toolFlutter, Gradle, CMakeflutter build, ./gradlew build
.venv, venvPythonpython -m venv + pip install -r requirements.txt
vendorPHP (Composer), Gocomposer install
~/.npm, ~/.cache/pip, ~/.gradle/cachescache dei gestori di pacchettisi riempiono di nuovo da sole

Una singola node_modules pesa spesso centinaia di megabyte; venti progetti vecchi diventano facilmente decine di gigabyte.

Trovarle e cancellarle a mano

Su Mac e Linux, per vedere quanto pesano tutte le node_modules sotto una cartella:

find ~/Developer -name node_modules -type d -prune -exec du -sh {} + | sort -h

Su Windows, Mac e Linux funziona anche npx npkill, che le elenca e ti fa scegliere quali eliminare.

Poi, progetto per progetto o per tutto il sistema:

cargo clean                                         # dentro un progetto Rust
flutter clean                                       # dentro un progetto Flutter
rm -rf ~/Library/Developer/Xcode/DerivedData/*      # Xcode, su Mac
npm cache clean --force                             # cache di npm
pip cache purge                                     # cache di pip
brew cleanup                                        # vecchie versioni di Homebrew

Attenzione con Docker: docker system prune libera molto spazio ma elimina anche i container fermi e le immagini non usate. Controlla prima con docker system df.

Cosa non toccare

  • la cartella .git e il codice sorgente;
  • i file di configurazione locali, come .env, che spesso non sono nel repository;
  • i file di lock (package-lock.json, Cargo.lock, poetry.lock): servono a ricreare esattamente le stesse dipendenze;
  • le cartelle di progetti su cui stai lavorando adesso: ricrearle costa tempo e una connessione.

Il criterio buono è l'età: le cartelle di build di un progetto fermo da tre mesi si possono cancellare a cuor leggero.

Tutto in un colpo d'occhio con TreeX

TreeX è un analizzatore del disco gratuito per Mac, Windows e Linux pensato per chi programma. Riconosce le cartelle di 16 ecosistemi di sviluppo e le cache di sistema, e le mostra come torri color corallo in una mappa del disco a città.

La modalità Recupera di TreeX: le cartelle di build e le cache si alzano come torri color corallo
La modalità Recupera di TreeX: le cartelle di build e le cache si alzano come torri color corallo

Dalla riga di comando basta un comando, o il tasto 4 nell'app:

treex dev ~                  # build e cache che puoi recuperare
treex clean ~/Developer      # prova senza cancellare niente
treex clean ~/Developer --apply   # le sposta nel Cestino

Ogni torre mostra il comando che ricrea la cartella e da quanto tempo il suo progetto è fermo, così scegli con calma cosa eliminare.

Prima di cancellare, TreeX riepiloga cosa verrà spostato nel Cestino
Prima di cancellare, TreeX riepiloga cosa verrà spostato nel Cestino

La pulizia è pensata per non fare danni:

  • tutto va nel Cestino, non viene eliminato per sempre;
  • subito prima di ogni cartella TreeX ricontrolla che sia ancora la stessa, che non sia un collegamento simbolico, che i file del progetto siano ancora lì e che dentro non ci sia un repository git;
  • le cartelle di sistema e la home sono sempre protette;
  • ogni operazione resta nel registro (treex history).

Ed è veloce: sui test pubblicati nel repository è il più rapido degli strumenti confrontati su tutti e tre i sistemi, e dalla seconda analisi rilegge solo ciò che è cambiato. Si scarica dalla pagina di TreeX.

Domande frequenti

Cancellare node_modules è sicuro?

Sì, se nel progetto c'è il file package.json (e meglio ancora il file di lock): npm install la ricrea identica. L'unico costo è il tempo del download la prossima volta che riapri il progetto.

Se cancello DerivedData, Xcode smette di funzionare?

No. Xcode la ricrea alla prossima compilazione, che sarà solo un po' più lenta. È anche uno dei rimedi classici quando una build si comporta in modo strano.

TreeX cancella i file per sempre?

No, per impostazione predefinita li sposta nel Cestino, da cui puoi recuperarli. L'eliminazione definitiva va scelta esplicitamente.