node_modules und Caches von npm, pnpm und yarn auf dem Mac löschen
Am meisten bringen meist alte node_modules-Ordner in Projekten, die du nicht mehr öffnest: Lösch sie und führe install erneut aus, wenn du das Projekt brauchst. Die Caches der Paketmanager kannst du gefahrlos mit npm cache clean --force, pnpm store prune und yarn cache clean leeren, dafür dauern Installationen länger. Prüf auch, ob in nvm oder fnm alte Node-Versionen liegen.
JavaScript-Projekte belegen an zwei Stellen Platz: im Ordner node_modules jedes Projekts und im globalen Cache deines Paketmanagers. Dazu kommen Versionsmanager wie nvm und fnm, die jede Node-Version behalten, die du je installiert hast. Nichts davon ist gefährlich aufzuräumen, wenn du weißt, was jeder Teil ist. Dieser Guide geht sie der Reihe nach durch, vom größten und sichersten bis zum spezielleren.
Schritt 1: Alte node_modules-Ordner finden
Jedes Projekt hat sein eigenes node_modules, und Projekte, an denen du nicht mehr arbeitest, behalten ihres für immer. Das ist oft der meiste Platz und am leichtesten zurückzuholen, weil jedes Projekt den Ordner aus package.json und der Lock-Datei neu aufbauen kann.
Zuerst messen
Führe find nur in dem Ordner aus, in dem dein Code liegt (hier ~/code, ändere das auf deinen). Dieser Befehl liest nur:
find ~/code -name node_modules -type d -prune -exec du -sh {} + 2>/dev/null | sort -h
-prune verhindert, dass find in jedes node_modules hineingeht. So listet es nur den obersten Ordner jedes Projekts und läuft viel schneller.
Um nur Projekte aufzulisten, deren node_modules sich seit 90 Tagen nicht verändert hat:
find ~/code -name node_modules -type d -prune -mtime +90 2>/dev/null
Bleib mit der Suche in deinem Code-Ordner. Führ sie nicht von / oder deinem ganzen Benutzerordner aus und lösch dann die Ergebnisse: Manche Apps und globale Tools haben ihr eigenes node_modules, und auch die von nvm verwalteten Node-Versionen liegen in ~/.nvm.
Die löschen, die du nicht brauchst
rm -rf ~/code/old-project/node_modules
Alternative: npkill
Wenn du eine visuelle Liste bevorzugst, zeigt npkill jedes node_modules unterhalb des Ordners, in dem du es startest, mit Größe und letzter Änderung:
cd ~/code
npx npkill --dry-run
--dry-run simuliert nur. Ohne die Option bewegst du dich mit den Pfeiltasten und löschst den ausgewählten Ordner mit der Leertaste. npkill warnt selbst, dass manche Anwendungen ihr node_modules zum Funktionieren brauchen, und markiert sie mit einem Warnzeichen. Starte es in deinem Code-Ordner, nicht im Wurzelverzeichnis der Festplatte.
Schritt 2: Der npm-Cache
npm legt jedes heruntergeladene Paket in einem Content-Cache ab, unter macOS standardmäßig in ~/.npm (die Daten liegen in ~/.npm/_cacache). Den Ort prüfst du mit:
npm config get cache
du -sh "$(npm config get cache)"
Geringeres Risiko: verify
npm cache verify
Laut der npm-Dokumentation räumt das nicht mehr benötigte Daten per Garbage Collection weg und prüft die Integrität des Caches. Du kannst es jederzeit gefahrlos ausführen.
Den ganzen Cache leeren
Laut npm repariert sich der Cache selbst, und es sollte nie nötig sein, ihn aus einem anderen Grund zu leeren, als Speicherplatz zurückzugewinnen. Wenn du den Platz willst, braucht clean die Option --force:
npm cache clean --force
Schritt 3: Der pnpm-Store
pnpm behält von jeder Paketversion eine Kopie in einem gemeinsamen Store und verlinkt sie in deine Projekte. Unter macOS ist das standardmäßig ~/Library/pnpm/store, außer du setzt PNPM_HOME oder XDG_DATA_HOME (pnpm store settings). So siehst du deinen:
pnpm store path
du -sh "$(pnpm store path)"
Um Pakete zu entfernen, die kein Projekt mehr nutzt:
pnpm store prune
Die pnpm-Dokumentation sagt, dass das Ausführen nicht schadet und keine Nebenwirkungen auf deine Projekte hat, und empfiehlt, es ab und zu auszuführen, aber nicht zu oft. Ein Paket, auf das das node_modules eines alten Projekts noch verlinkt, gilt als genutzt. Lösch also zuerst alte node_modules (Schritt 1) und führe danach prune aus.
Schritt 4: Der yarn-Cache
Der Befehl hängt von deiner yarn-Version ab. Prüf sie mit yarn --version.
Yarn Classic (1.x)
yarn cache dir
zeigt, wo der globale Cache liegt (Yarn Classic docs). yarn cache list zeigt die Pakete darin.
yarn cache clean
Yarn Berry (2.x und neuer)
Standardmäßig speichert das moderne Yarn den Cache in einem globalen Ordner innerhalb von ~/.yarn/berry (die Einstellung enableGlobalCache ist standardmäßig true). Manche Projekte halten stattdessen einen lokalen Cache in .yarn/cache, oft um ihn zu committen (.yarnrc.yml settings).
yarn cache clean --all
Laut der Referenz zu yarn cache clean leert --mirror den globalen Cache und --all sowohl den globalen Cache als auch den lokalen Cache des aktuellen Projekts. Ohne Optionen leert es nur den lokalen Cache.
Schritt 5: Alte Node-Versionen in nvm oder fnm
Jede Node-Version belegt Platz, und ihre globalen Pakete kommen dazu. Versionsmanager entfernen sie nie von selbst.
nvm
nvm ls
du -sh ~/.nvm/versions/node/* 2>/dev/null
nvm ls listet die installierten Versionen auf (nvm README). Um eine zu entfernen, die du nicht nutzt:
nvm uninstall 18
nvm cache clear
nvm cache clear löscht zwischengespeicherte Node-Downloads.
fnm
fnm list
fnm uninstall 18
fnm list zeigt die installierten Versionen und fnm uninstall entfernt eine (fnm commands). Es gilt dieselbe Warnung: Mit fnm install kannst du sie wieder installieren.
Eine einfache Routine
Führe einmal im Monat das find aus Schritt 1 aus und lösch node_modules in Projekten, die du seit Monaten nicht angefasst hast. Danach pnpm store prune, wenn du pnpm nutzt. Leere den npm- oder yarn-Cache nur, wenn du den Platz wirklich brauchst. Wenn du auch Apple-Apps baust oder Container nutzt, lies, wie du Xcode DerivedData sicher löschst, und Docker prune auf dem Mac. Für den Rest deiner Festplatte sieh dir Speicherplatz auf dem Mac freigeben an oder lade Pruneo kostenlos herunter.
FAQ
Ist es sicher, node_modules zu löschen?
Ja, in deinen eigenen Projekten. Der Ordner wird mit npm install, pnpm install oder yarn install aus package.json und der Lock-Datei neu aufgebaut. Lösch keine node_modules-Ordner, die zu installierten Apps oder globalen Tools gehören.
Sollte ich npm cache clean --force ausführen?
Nur, um Speicherplatz zurückzugewinnen. Laut npm repariert sich der Cache selbst, und es sollte aus keinem anderen Grund nötig sein, ihn zu leeren. Nutze zuerst npm cache verify.
Macht pnpm store prune meine Projekte kaputt?
Nein. Laut pnpm entfernt es nur Pakete, auf die kein Projekt verweist, und hat keine Nebenwirkungen auf deine Projekte. Eine spätere Installation lädt ein entferntes Paket eventuell erneut herunter.
Wo liegt der pnpm-Store auf dem Mac?
Standardmäßig in ~/Library/pnpm/store, außer PNPM_HOME oder XDG_DATA_HOME ist gesetzt. Mit pnpm store path siehst du den genauen Ort.