Ontwikkelaars

Overal node_modules: zo vind je ze, ruim je ze op en krijg je ze terug

Vind elke node_modules-map op je Mac met de grootte erbij, verwijder wat je niet nodig hebt, installeer opnieuw vanuit de lockfile en wis de pakketcaches.

5 min. leestijdDoor het MoreRoom-team, Yando Pte. Ltd.Deze pagina als Markdown

In het kort

  • node_modules verwijderen is veilig zolang je package.json en de lockfile bewaart; npm ci of pnpm install zet exact dezelfde versies terug.
  • find met -prune toont elke node_modules-map in je thuismap met de grootte erbij, zonder in geneste mappen af te dalen.
  • Met npx npkill blader je door node_modules-mappen en verwijder je ze interactief, maar meteen en zonder prullenmand.
  • Met pnpm zijn de bestanden in node_modules klonen of harde links van een gedeelde opslag, dus verwijderen levert weinig op totdat je pnpm store prune uitvoert.
  • Buildmappen zoals .next, .turbo, .nuxt, .svelte-kit en .parcel-cache worden automatisch opnieuw opgebouwd en mogen ook veilig weg.

Zo vind en ruim je node_modules-mappen op een Mac op

  1. Toon node_modules-mappen met hun grootte. Voer een find-opdracht uit op je thuismap die ~/Library en de prullenmand overslaat, bij elke bovenste node_modules stopt en de resultaten aan du -sh doorgeeft.
  2. Kies projecten waaraan je niet werkt. Controleer of elk project een package.json en een lockfile heeft, zoals package-lock.json, pnpm-lock.yaml, yarn.lock of bun.lock. Bewaar die bestanden.
  3. Verwijder hun node_modules-mappen. Verplaats elke node_modules-map in de Finder naar de prullenmand, of verwijder ze interactief met npx npkill, dat ze definitief verwijdert.
  4. Wis de caches van je pakketbeheerders. Voer npm cache clean --force, pnpm store prune, yarn cache clean of bun pm cache rm uit voor de pakketbeheerders die je gebruikt.
  5. Installeer opnieuw als je terugkeert naar een project. Voer npm ci, pnpm install, yarn install of bun install uit in de projectmap om node_modules vanuit de lockfile terug te zetten.

Een node_modules-map bevat de afhankelijkheden die voor één JavaScript- of TypeScript-project zijn geïnstalleerd, en is doorgaans een paar honderd megabyte groot. Met tientallen oude projecten loopt dat makkelijk op tot tientallen gigabytes. Je kunt ze veilig verwijderen zolang je package.json en de lockfile bewaart: je pakketbeheerder installeert dezelfde versies opnieuw zodra je naar het project terugkeert.

Vind elke node_modules-map en de grootte ervan

Deze opdracht doorzoekt je thuismap, slaat ~/Library en de prullenmand over en toont elke node_modules-map met de grootte, met de grootste onderaan:

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

Zo werkt het: de eerste -prune slaat de twee uitgesloten mappen over, -type d -name node_modules vindt de mappen, en de tweede -prune zorgt dat find er niet in afdaalt, zodat geneste node_modules één keer worden meegeteld, binnen hun bovenliggende map. du -sh meet elke map en sort -h sorteert de lijst. De opdracht leest alleen. Bij een grote thuismap kan het een paar minuten duren, en Terminal kan om toegang vragen tot Documenten, Bureaublad of Downloads.

Negeer resultaten in mappen van tools zoals ~/.nvm, ~/.vscode of ~/.cursor. Die horen bij geïnstalleerde tools en editorextensies, niet bij je projecten.

Gebruiken je projecten pnpm, dan zijn de getoonde groottes groter dan wat je terugkrijgt. Verderop lees je waarom.

Verwijder de mappen die je niet nodig hebt

Open voordat je iets verwijdert de projectmap en controleer of er een lockfile in staat: package-lock.json (npm), pnpm-lock.yaml (pnpm), yarn.lock (Yarn) of bun.lock / bun.lockb (Bun). Bewaar die, en bewaar ook package.json.

De veiligste manier om te verwijderen is node_modules in de Finder naar de prullenmand te slepen. Zolang je de prullenmand niet leegt, kun je nog van gedachten veranderen. Met veel kleine bestanden duurt het verplaatsen naar de prullenmand even.

Vanuit Terminal, in één projectmap:

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

rm -rf verwijdert definitief, zonder prullenmand. Controleer eerst met pwd in welke map je staat, en gebruik het nooit met een jokerteken of een lege variabele.

npkill: een interactief alternatief

npkill toont node_modules-mappen met hun grootte en laat je ze met één toetsaanslag tegelijk verwijderen:

npx npkill -d ~/Projects

-d bepaalt waar de zoektocht begint; zonder die optie begint npkill in de huidige map. Navigeer met de pijltoetsen en druk op de spatiebalk of Del om de geselecteerde map te verwijderen. npkill verwijdert meteen, zonder prullenmand. Mappen die apps nodig hebben om te werken, markeert het met ⚠️; laat die met rust. Met --dry-run simuleer je het verwijderen als je het eerst wilt uitproberen.

Opnieuw installeren als je terugkeert naar een project

Gebruik de opdracht die precies installeert wat in de lockfile staat:

Pakketbeheerder Lockfile Opnieuw installeren
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 vereist een lockfile, verwijdert eerst een eventuele bestaande node_modules en wijzigt nooit package.json of de lockfile. Een gewone npm install werkt ook, maar kan de lockfile bijwerken.

Andere mappen die zichzelf opnieuw opbouwen

Frameworks en buildtools bewaren caches en uitvoer naast node_modules. In projecten die je niet draait, kun je ze veilig verwijderen; de volgende build of devserver maakt ze opnieuw aan.

Map Aangemaakt door
.next Next.js
.nuxt Nuxt
.svelte-kit SvelteKit
.turbo Turborepo
.parcel-cache Parcel
.angular Angular CLI

dist en build bevatten meestal ook builduitvoer, maar de namen zijn algemeen. Sommige projecten committen daar bestanden of gebruiken ze voor iets anders, dus kijk erin voordat je ze verwijdert.

Zo toon je de frameworkcaches in een projectenmap:

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

De globale pakketcaches wissen

Elke pakketbeheerder houdt daarnaast een downloadcache bij die alle projecten delen. Die wissen is definitief, maar onschuldig: pakketten worden opnieuw gedownload als dat nodig is.

npm cache clean --force
pnpm store prune
yarn cache clean
bun pm cache rm
  • npm bewaart zijn cache in ~/.npm/_cacache. De documentatie van npm cache legt uit waarom clean --force nodig heeft en vermeldt dat npm cache verify opruimt zonder alles te legen. Pakketten die npx ophaalt, staan in ~/.npm/_npx.
  • pnpm bewaart zijn opslag op macOS in ~/Library/pnpm/store (pnpm store path toont die van jou). pnpm store prune verwijdert alleen pakketten waarnaar geen project verwijst, en de documentatie van pnpm raadt aan het af en toe uit te voeren, niet voortdurend.
  • Yarn Classic cachet in ~/Library/Caches/Yarn. Bij Yarn Berry leegt yarn cache clean --mirror de globale cache in ~/.yarn/berry/cache.
  • Bun cachet in ~/.bun/install/cache; bun pm cache rm maakt die leeg.

Ook oude Node.js-versies die je met nvm hebt geïnstalleerd, tellen op in ~/.nvm/versions/node; met nvm uninstall <version> verwijder je een versie die je niet meer nodig hebt.

Waarom pnpm minder vrijmaakt dan du aangeeft

npm en Yarn Classic kopiëren elk pakket naar de node_modules van elk project. pnpm bewaart elk pakket één keer, in een content-addressable store, en linkt de bestanden in elk project dat het pakket gebruikt. Op macOS probeert de standaardinstelling packageImportMethod van pnpm eerst APFS-klonen en daarna harde links.

npm kopieert pakketten naar elk project, terwijl pnpm één opslag deelt via klonen of harde links

Hoe dan ook worden de bytes gedeeld. du telt in elk project toch de volledige grootte, dus de node_modules van een pnpm-project verwijderen levert meestal veel minder op dan werd aangegeven. De ruimte komt terug wanneer pnpm store prune pakketten verwijdert die geen overgebleven project meer gebruikt. Daarvoor moet de opslag op dezelfde schijf staan als het project; projecten op een externe schijf krijgen daar een eigen opslag.

Hoe MoreRoom helpt

De gratis versie van MoreRoom vindt node_modules-mappen in projecten die een lockfile hebben en 30 dagen niet zijn aangeraakt, plus frameworkcaches zoals .next en .turbo, en labelt ze als “Veilig te verwijderen”. Het slaat ~/Library over, net als mappen van tools zoals ~/.nvm en ~/.vscode. Je verplaatst onderdelen één voor één naar de prullenmand, met Herstel. Voor de npm-cache en de pnpm-opslag voert MoreRoom npm cache clean --force en pnpm store prune uit; die opdrachten zijn definitief en worden ook zo gelabeld.

MoreRoom Pro voegt Projectwinterslaap toe: inactieve projecten laten mappen vallen die opnieuw kunnen worden opgebouwd, zoals node_modules en builduitvoer, en worden met één klik weer wakker zodra je terugkeert. Pro bevat ook de Verzamelaar en Doelmodus.

Veelgestelde vragen

Is het veilig om node_modules te verwijderen?

Ja. De map bevat alleen geïnstalleerde afhankelijkheden, die je pakketbeheerder opnieuw kan installeren vanuit package.json en de lockfile. Verwijder hem alleen bij projecten die je nu niet draait, en bewaar de lockfile.

Moet ik package-lock.json ook verwijderen?

Nee. De lockfile legt de exacte versies vast die werkten. Bewaar hem, zodat npm ci, pnpm install of yarn install later dezelfde node_modules kan aanmaken.

Waarom levert het verwijderen van node_modules in een pnpm-project zo weinig ruimte op?

pnpm bewaart één kopie van elk pakket in een gedeelde opslag en kloont of hardlinkt die bestanden in elk project. Verwijder je de node_modules van een project, dan verdwijnen alleen de links; pnpm store prune verwijdert daarna de pakketten die geen enkel project gebruikt.

Is npm cache clean --force veilig?

Ja. Het leegt de downloadcache van npm in ~/.npm/_cacache, en npm downloadt pakketten opnieuw als dat nodig is. Volgens de documentatie van npm is de cache wissen alleen nuttig om schijfruimte terug te winnen.

Verplaatst npkill mappen naar de prullenmand?

Nee. npkill verwijdert de geselecteerde mappen meteen. Gebruik de optie --dry-run om te oefenen, en de Finder als je de prullenmand als vangnet wilt.

Mappen in deze handleiding