Como encontrar todas as pastas node_modules no seu Mac
Antes de conseguir fazer a limpeza, você precisa saber o que existe. A maioria dos desenvolvedores acha que tem "algumas" pastas node_modules e descobre dezenas. Este guia traz os comandos exatos para encontrar todas elas, medir seu tamanho e classificá-las por quão seguro é excluí-las.
A busca básica
Comece pela pasta onde seus projetos vivem (ajuste ~/code para a sua estrutura):
find ~/code -name node_modules -type d -prune
A flag -prune importa: ela impede que o find desça para dentro de cada node_modules encontrado, o que pula os node_modules aninhados dentro das dependências (esses desaparecem junto com o pai de qualquer forma) e torna o comando drasticamente mais rápido.
Se seus projetos estão espalhados, busque em toda a sua pasta pessoal (home). Espere que isso demore um pouco em um disco grande:
find ~ -name node_modules -type d -prune 2>/dev/null
O 2>/dev/null esconde erros de permissão de pastas do sistema que você não conseguiria ler de qualquer forma.
Adicione os tamanhos
Encaminhe cada resultado para o du:
find ~/code -name node_modules -type d -prune -exec du -sh {} + 2>/dev/null | sort -rh
sort -rh coloca as maiores pastas no topo. Em uma máquina com um ano de trabalho ativo em JavaScript, o topo dessa lista costuma ser um choque: pastas individuais de 800 MB a 2 GB, e totais na casa das dezenas de gigabytes.
Para o número total único:
find ~/code -name node_modules -type d -prune -exec du -sk {} + 2>/dev/null | awk '{s+=$1} END {printf "%.1f GB\n", s/1048576}'
Um alerta se você usa pnpm: os hard links fazem esses números superestimarem o total, às vezes muito. Os bytes são compartilhados com o store global, e excluir um projeto libera menos do que o du sugere. Os detalhes estão em O pnpm store explicado.
Classifique por tempo de inatividade
O tamanho diz o que vale a pena excluir; a idade diz o que é seguro. Um node_modules que você não toca há seis meses pertence a um projeto ao qual você provavelmente não vai voltar tão cedo, e reinstalar depois custa apenas um npm install.
Isso lista cada pasta de projeto com a última vez que algo no projeto (excluindo o próprio node_modules) foi modificado:
for nm in $(find ~/code -name node_modules -type d -prune); do
proj=$(dirname "$nm")
last=$(find "$proj" -path "$proj/node_modules" -prune -o -type f -newer "$nm" -print -quit 2>/dev/null)
mod=$(stat -f "%Sm" -t "%Y-%m-%d" "$proj")
size=$(du -sh "$nm" 2>/dev/null | cut -f1)
echo "$mod $size $proj"
done | sort
Qualquer item no topo dessa lista (mais antigos primeiro) com uma coluna de tamanho generosa é um forte candidato. Excluir é seguro porque o node_modules é sempre reproduzível a partir do lockfile, como abordamos em Como excluir node_modules com segurança.
O problema da manutenção
Esses comandos funcionam. O problema é que a limpeza de disco não é um evento único. Novos projetos aparecem, os antigos ficam obsoletos, e daqui a três meses os mesmos gigabytes estão de volta. Ninguém executa um loop de shell de cinco linhas em uma agenda fixa.
Essa lacuna entre "possível no terminal" e "realmente acontece" é exatamente o que o TidyDisk fecha. Ele fica na barra de menu do macOS e mantém a resposta sempre atual: cada pasta node_modules, seu tamanho real (com consciência do pnpm, sem contagem dupla de hard links), e há quanto tempo o projeto está parado, classificados e prontos. Quando o total ultrapassa um limite que importa para você, você vê sem precisar perguntar.
Decida, depois exclua
Qualquer que seja o caminho escolhido, o critério de decisão é o mesmo:
- Projetos ativos (usados nesta semana): mantenha. O custo de reinstalar seria irritante.
- Projetos recentes (usados neste mês): mantenha, a menos que sejam enormes.
- Tudo mais antigo: exclua. Se você voltar ao projeto algum dia, o
npm installreconstrói tudo em um ou dois minutos.
E quando for excluir, prefira a Lixeira ao rm -rf. A Lixeira não custa nada e transforma um caminho digitado errado de um desastre em um não evento.
Rode o escaneamento gratuito do TidyDisk e você terá seu número completo e honesto em cerca de um minuto. A maioria dos primeiros escaneamentos encontra mais de 20 GB. Recuperar esse espaço é um clique com uma licença vitalícia de 19 euros.