TidyDisk
GitHubObter o app
← Todos os artigos

Por que você nunca deve dar rm -rf em node_modules (use a Lixeira)

TidyDisk team

rm -rf node_modules é um dos comandos mais digitados no desenvolvimento JavaScript. Funciona, é rápido, e uma vez a cada carreira ele destrói algo que importava. Este artigo é o argumento para quebrar esse hábito, e o que digitar em vez disso.

O modo de falha não é hipotético

O rm -rf exclui imediatamente, de forma recursiva, silenciosa e permanente. Não há confirmação, não há desfazer, e não há recuperação a não ser com ferramentas forenses ou backups. Combinado com o autocomplete do shell e a memória muscular, os acidentes clássicos se parecem com isto:

rm -rf node_modules   # tudo bem, na pasta certa
rm -rf node_module s  # um espaço a mais: exclui node_module E s, ou dá erro se você tiver sorte
rm -rf ./node_modules # digitado em ~ em vez de dentro do projeto? nada para te impedir
rm -rf $DIR/node_modules  # $DIR sem valor: isso vira rm -rf /node_modules

O caso da variável sem valor já queimou tanta gente que virou clichê. Nenhum desses é um problema de habilidade; são problemas de cansaço, e todo mundo fica cansado às vezes. O raio de destruição do comando é ilimitado e sua velocidade é instantânea, exatamente a combinação errada para uma tarefa de rotina.

A Lixeira existe para isso

O macOS tem uma exclusão recuperável há quarenta anos. Arquivos na Lixeira não custam nada até você esvaziá-la, e eles já salvaram incontáveis erros. As ferramentas de dev em geral ignoram isso porque o caminho no estilo POSIX (rm) é anterior à Lixeira e porque escrever na Lixeira a partir de um script custa uma linha a mais. Essa é uma troca ruim: todo o sentido de excluir o node_modules é que isso é de baixo risco, e a exclusão via Lixeira é o que realmente torna isso de baixo risco, mesmo quando você escolhe a pasta errada.

Opções de linha de comando no macOS:

# Finder via AppleScript (funciona em qualquer lugar, sem instalar nada)
osascript -e 'tell app "Finder" to delete POSIX file "'$PWD'/node_modules"'

# ferramenta do Homebrew, ergonomia melhor
brew install trash
trash node_modules

No macOS moderno também existe um comando trash nativo em algumas versões; brew install trash cobre o resto. Ambos oferecem o mesmo contrato: a exclusão é instantânea do ponto de vista do seu projeto, e reversível do seu.

Se quiser que o hábito pegue, crie um alias:

alias rmnm='trash ./node_modules && echo "node_modules movido para a Lixeira"'

"Mas o node_modules é descartável de qualquer forma"

Verdade, e é exatamente por isso que excluí-lo é seguro: tudo volta com npm install. O argumento aqui não é sobre o node_modules em si. É sobre o que está do lado quando seus dedos escorregam. A pasta que você queria digitar, a pasta vizinha que o autocomplete escolheu, o caminho que uma variável não preencheu. A exclusão via Lixeira significa que o pior cenário de uma sessão de limpeza é arrastar uma pasta de volta para fora, em vez de explicar para si mesmo para onde foram três semanas de uma branch não enviada.

Há também um ponto mais sutil: hábitos se transferem. As mãos que dão rm -rf node_modules todos os dias são as mesmas mãos que um dia vão digitar rm -rf ao lado de algo insubstituível. Tornar a exclusão recuperável seu padrão é um seguro barato para tudo o que você faz.

E o espaço em disco?

Arquivos na Lixeira ainda ocupam disco até você esvaziá-la, e se você está limpando para liberar espaço, isso importa. O fluxo ainda é melhor que o rm: exclua para a Lixeira, confirme que seus projetos estão bem, depois esvazie a Lixeira deliberadamente (ou deixe o esvaziamento automático de 30 dias do macOS fazer isso). Separar "remover do projeto" de "destruir os bytes" é exatamente o que torna o processo seguro.

O nosso viés, dito com todas as letras

Construímos o TidyDisk em torno desse princípio: toda limpeza que ele faz passa pela Lixeira do macOS, nunca pelo rm -rf, sem exceções. Ele encontra cada node_modules no seu Mac, mostra tamanhos reais (incluindo a contagem honesta do pnpm), e limpa o que você escolher em um clique que pode ser desfeito. O escaneamento é gratuito; a limpeza em um clique é uma licença vitalícia de 19 euros.

Quer instale ou não, adote o hábito: em um Mac, uma exclusão que você pode desfazer é estritamente melhor do que uma que não pode. Crie um alias para o trash, aposente o rm -rf da sua rotina diária, e guarde-o para o raro dia em que realmente precisar dele.