Em resumo
- Apagar a node_modules é seguro desde que você guarde o package.json e o lockfile; npm ci ou pnpm install traz de volta exatamente as mesmas versões.
- O find com -prune lista todas as pastas node_modules da sua pasta pessoal com o tamanho de cada uma, sem descer nas aninhadas.
- O npx npkill permite navegar pelas pastas node_modules e apagá-las de forma interativa, mas apaga na hora, sem passar pelo Lixo.
- Com o pnpm, os arquivos da node_modules são clones ou links físicos de um store compartilhado, então apagá-los libera pouco até você executar pnpm store prune.
- Pastas de build como .next, .turbo, .nuxt, .svelte-kit e .parcel-cache são recriadas automaticamente e também podem ser removidas com segurança.
Como encontrar e limpar pastas node_modules no Mac
- Liste as pastas node_modules com o tamanho de cada uma. Execute na sua pasta pessoal um comando find que ignore ~/Library e o Lixo, pare em cada node_modules de nível superior e passe os resultados para o du -sh.
- Escolha os projetos em que você não está trabalhando. Verifique se cada projeto tem o package.json e um lockfile, como package-lock.json, pnpm-lock.yaml, yarn.lock ou bun.lock. Guarde esses arquivos.
- Apague as pastas node_modules desses projetos. Mova cada pasta node_modules para o Lixo pelo Finder ou apague-as de forma interativa com npx npkill, que as remove definitivamente.
- Limpe os caches dos gerenciadores de pacotes. Execute npm cache clean --force, pnpm store prune, yarn cache clean ou bun pm cache rm, conforme os gerenciadores de pacotes que você usa.
- Reinstale quando voltar a um projeto. Execute npm ci, pnpm install, yarn install ou bun install na pasta do projeto para restaurar a node_modules a partir do lockfile.
Uma pasta node_modules guarda as dependências instaladas para um projeto JavaScript ou TypeScript, e uma pasta típica tem algumas centenas de megabytes. Com dezenas de projetos antigos, elas chegam facilmente a dezenas de gigabytes. Elas podem ser apagadas com segurança desde que você guarde o package.json e o lockfile: o gerenciador de pacotes reinstala as mesmas versões quando você voltar ao projeto.
Encontre todas as pastas node_modules e o tamanho delas
Este comando pesquisa a sua pasta pessoal, ignora ~/Library e o Lixo e mostra cada pasta node_modules com o tamanho, com as maiores no fim:
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
Como funciona: o primeiro -prune ignora as duas pastas excluídas, -type d -name node_modules encontra as pastas, e o segundo -prune impede o find de descer nelas, então as node_modules aninhadas são contadas uma vez só, dentro da pasta-mãe. O du -sh mede cada uma e o sort -h ordena a lista. O comando só lê. Numa pasta pessoal grande, pode levar alguns minutos, e o Terminal pode pedir acesso a Documentos, Mesa ou Downloads.
Ignore os resultados dentro de pastas de ferramentas como ~/.nvm, ~/.vscode ou ~/.cursor. Eles pertencem a ferramentas instaladas e extensões de editores, e não aos seus projetos.
Se os seus projetos usam o pnpm, os tamanhos mostrados são maiores do que o espaço que você vai recuperar. O motivo é explicado mais abaixo.
Apague as que você não precisa
Antes de apagar, abra a pasta do projeto e confira se ela tem um lockfile: package-lock.json (npm), pnpm-lock.yaml (pnpm), yarn.lock (Yarn) ou bun.lock / bun.lockb (Bun). Guarde esse arquivo e o package.json.
A forma mais segura de apagar é arrastar a node_modules para o Lixo no Finder. Você ainda pode mudar de ideia até esvaziar o Lixo. Com muitos arquivos pequenos, mover para o Lixo leva um instante.
No Terminal, dentro da pasta de um projeto:
cd ~/Projects/old-app
rm -rf node_modules
O rm -rf apaga de forma definitiva, sem passar pelo Lixo. Confira antes em que pasta você está com pwd e nunca o execute com um curinga ou com uma variável vazia.
npkill: uma alternativa interativa
O npkill lista as pastas node_modules com o tamanho de cada uma e permite apagá-las com uma tecla de cada vez:
npx npkill -d ~/Projects
O -d define onde a pesquisa começa; sem ele, o npkill começa na pasta atual. Navegue com as setas e pressione Espaço ou Del para apagar a pasta selecionada. O npkill apaga na hora, sem passar pelo Lixo. Ele marca com ⚠️ as pastas de que apps precisam para funcionar, e essas devem ficar onde estão. O --dry-run simula a exclusão, se quiser testar antes.
Reinstale quando voltar a um projeto
Use o comando que instala exatamente o que o lockfile indica:
| Gerenciador de pacotes | 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 |
O npm ci exige um lockfile, remove antes qualquer node_modules existente e nunca altera o package.json nem o lockfile. Um npm install simples também funciona, mas pode atualizar o lockfile.
Outras pastas que se recriam sozinhas
Frameworks e ferramentas de build guardam caches e saídas ao lado da node_modules. Elas podem ser apagadas com segurança em projetos que você não está rodando; o próximo build ou servidor de desenvolvimento as recria.
| Pasta | Criada por |
|---|---|
.next |
Next.js |
.nuxt |
Nuxt |
.svelte-kit |
SvelteKit |
.turbo |
Turborepo |
.parcel-cache |
Parcel |
.angular |
Angular CLI |
dist e build também costumam ser saídas de build, mas os nomes são genéricos. Alguns projetos versionam arquivos nelas ou as usam para outra coisa, então olhe o conteúdo antes de apagar.
Para listar os caches de frameworks numa pasta de projetos:
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
Limpe os caches globais de pacotes
Cada gerenciador de pacotes também mantém um cache de downloads compartilhado por todos os projetos. Limpá-lo é definitivo, mas inofensivo: os pacotes são baixados de novo quando necessário.
npm cache clean --force
pnpm store prune
yarn cache clean
bun pm cache rm
- O npm guarda o cache em
~/.npm/_cacache. A documentação do cache do npm explica por que ocleanexige--forcee observa que onpm cache verifyfaz a coleta de lixo sem esvaziar tudo. Os pacotes baixados pelonpxficam em~/.npm/_npx. - O pnpm guarda o store em
~/Library/pnpm/storeno macOS (pnpm store pathmostra o seu). Opnpm store pruneremove só os pacotes que nenhum projeto referencia, e a documentação do pnpm sugere executá-lo de vez em quando, e não o tempo todo. - O Yarn Classic usa o cache em
~/Library/Caches/Yarn. No Yarn Berry,yarn cache clean --mirroresvazia o cache global em~/.yarn/berry/cache. - O Bun usa o cache em
~/.bun/install/cache;bun pm cache rmo esvazia.
Versões antigas do Node.js instaladas com o nvm também se acumulam em ~/.nvm/versions/node; nvm uninstall <version> remove uma de que você não precisa mais.
Por que o pnpm libera menos do que o du indica
O npm e o Yarn Classic copiam cada pacote para a node_modules de cada projeto. O pnpm guarda cada pacote uma única vez, num store endereçável por conteúdo, e liga os arquivos dele a cada projeto que o usa. No macOS, o packageImportMethod padrão do pnpm tenta primeiro clones APFS e depois links físicos.
Em qualquer dos casos, os bytes são compartilhados. O du continua contando o tamanho inteiro em cada projeto, então apagar a node_modules de um projeto pnpm normalmente libera bem menos do que o valor informado. O espaço volta quando o pnpm store prune remove os pacotes que nenhum dos projetos restantes usa. Para isso funcionar, o store precisa estar no mesmo disco que o projeto; projetos num disco externo têm um store próprio lá.
Como o MoreRoom ajuda
A versão gratuita do MoreRoom encontra pastas node_modules em projetos que têm um lockfile e não foram mexidos há 30 dias, além de caches de frameworks como .next e .turbo, e as marca como “Seguro remover”. Ela ignora ~/Library e pastas de ferramentas como ~/.nvm e ~/.vscode. Você move os itens para o Lixo um de cada vez, com Desfazer. Para o cache do npm e o store do pnpm, o MoreRoom executa npm cache clean --force e pnpm store prune; esses comandos são definitivos e estão sinalizados como tal.
O MoreRoom Pro acrescenta a Hibernação de projetos: os projetos inativos se desfazem das pastas recriáveis, como a node_modules e as saídas de build, e despertam de novo com um clique quando você volta a eles. O Pro também inclui o Coletor e o modo meta.
Perguntas frequentes
É seguro apagar a node_modules?
Sim. Ela só contém as dependências instaladas, que o gerenciador de pacotes consegue instalar de novo a partir do package.json e do lockfile. Apague-a só em projetos que você não está rodando no momento e guarde o lockfile.
Devo apagar o package-lock.json também?
Não. O lockfile registra as versões exatas que funcionavam. Guarde-o para que npm ci, pnpm install ou yarn install consigam recriar a mesma node_modules depois.
Por que apagar a node_modules de um projeto pnpm libera tão pouco espaço?
O pnpm guarda uma única cópia de cada pacote num store compartilhado e clona ou cria links físicos desses arquivos em cada projeto. Apagar a node_modules de um projeto remove só os links; depois, pnpm store prune apaga os pacotes que nenhum projeto usa.
O npm cache clean --force é seguro?
Sim. Ele esvazia o cache de downloads do npm em ~/.npm/_cacache, e o npm baixa os pacotes de novo quando precisa. A documentação do npm observa que limpar o cache só serve para recuperar espaço em disco.
O npkill move as pastas para o Lixo?
Não. O npkill apaga as pastas selecionadas na hora. Use a opção --dry-run para ensaiar e o Finder se quiser ter o Lixo como rede de segurança.