Logo do PruneoPruneo

Como limpar node_modules e o cache do npm, pnpm e yarn no Mac

Resposta curta

O que mais devolve espaço costuma ser apagar as pastas node_modules de projetos que você não abre mais: apague e rode o install de novo quando precisar do projeto. Os caches dos gerenciadores de pacotes podem ser limpos com segurança com npm cache clean --force, pnpm store prune e yarn cache clean, ao custo de instalações mais lentas. Confira também as versões antigas do Node no nvm ou fnm.

Projetos JavaScript ocupam espaço em dois lugares: a pasta node_modules dentro de cada projeto e o cache global do seu gerenciador de pacotes. Além disso, gerenciadores de versão como nvm e fnm guardam todas as versões do Node que você já instalou. Nada disso é perigoso de limpar se você sabe o que é cada parte. Este guia passa por elas em ordem, da maior e mais segura até as mais específicas.

Passo 1: encontre pastas node_modules antigas

Cada projeto tem a sua própria node_modules, e os projetos que você deixou de usar guardam a deles para sempre. Muitas vezes é aqui que está a maior quantidade de espaço, e a mais fácil de recuperar, porque qualquer projeto consegue recriá-la a partir do package.json e do lock file.

Meça primeiro

Rode o find só dentro da pasta onde você guarda o seu código (aqui ~/code, troque pela sua). Este comando só lê:

find ~/code -name node_modules -type d -prune -exec du -sh {} + 2>/dev/null | sort -h

O -prune impede o find de entrar em cada node_modules, então ele lista só a pasta de nível mais alto de cada projeto e roda muito mais rápido.

Para listar só os projetos cuja node_modules não muda há 90 dias:

find ~/code -name node_modules -type d -prune -mtime +90 2>/dev/null

Mantenha a busca dentro da sua pasta de código. Não rode a partir de / ou da sua pasta de usuário inteira para depois apagar os resultados: alguns apps e ferramentas globais têm a sua própria node_modules, e as versões do Node gerenciadas pelo nvm também ficam em ~/.nvm.

Apague as que você não precisa

rm -rf ~/code/old-project/node_modules

Opção: npkill

Se você prefere uma lista visual, o npkill mostra toda node_modules abaixo da pasta onde você o roda, com o tamanho e a última alteração:

cd ~/code
npx npkill --dry-run

O --dry-run só simula. Sem ele, você navega com as setas e apaga a pasta selecionada com Espaço. O próprio npkill avisa que alguns aplicativos precisam da sua node_modules para funcionar, e os marca com um sinal de alerta. Rode a partir da sua pasta de código, não da raiz do disco.

Passo 2: o cache do npm

O npm guarda cada pacote que baixa em um cache de conteúdo, por padrão em ~/.npm no macOS (os dados ficam em ~/.npm/_cacache). Você pode conferir a localização com:

npm config get cache
du -sh "$(npm config get cache)"

Menor risco: verificar

npm cache verify

Segundo a documentação do npm, isso faz a coleta de lixo dos dados que não são mais necessários e verifica a integridade do cache. É seguro rodar a qualquer momento.

Limpe o cache inteiro

O npm diz que o cache se corrige sozinho e que nunca deveria ser necessário limpá-lo por outro motivo que não seja recuperar espaço em disco. Se você quer o espaço, o clean exige --force:

npm cache clean --force

Passo 3: o store do pnpm

O pnpm guarda uma cópia de cada versão de pacote em um store compartilhado e cria links para ela nos seus projetos. No macOS, o padrão é ~/Library/pnpm/store, a menos que você defina PNPM_HOME ou XDG_DATA_HOME (configurações do store do pnpm). Para ver o seu:

pnpm store path
du -sh "$(pnpm store path)"

Para remover os pacotes que nenhum projeto usa mais:

pnpm store prune

A documentação do pnpm diz que rodar esse comando não faz mal e não tem efeitos colaterais nos seus projetos, e sugere rodá-lo de vez em quando, mas não com muita frequência. Um pacote para o qual a node_modules de um projeto antigo ainda aponta conta como usado, então apague primeiro as node_modules antigas (Passo 1) e faça o prune depois.

Passo 4: o cache do yarn

O comando depende da sua versão do yarn. Rode yarn --version para conferir.

Yarn Classic (1.x)

yarn cache dir

mostra onde fica o cache global (documentação do Yarn Classic). yarn cache list mostra os pacotes que estão nele.

yarn cache clean

Yarn Berry (2.x e posteriores)

Por padrão, o Yarn moderno guarda o cache em uma pasta global dentro de ~/.yarn/berry (a configuração enableGlobalCache é true por padrão). Alguns projetos mantêm um cache local em .yarn/cache, muitas vezes para fazer commit dele (configurações do .yarnrc.yml).

yarn cache clean --all

Segundo a referência do yarn cache clean, --mirror limpa o cache global e --all limpa tanto o cache global quanto o cache local do projeto atual. Sem opções, ele limpa só o cache local.

Passo 5: versões antigas do Node no nvm ou fnm

Cada versão do Node ocupa espaço, e os pacotes globais dela vêm junto. Os gerenciadores de versão nunca as removem sozinhos.

nvm

nvm ls
du -sh ~/.nvm/versions/node/* 2>/dev/null

nvm ls lista as versões instaladas (README do nvm). Para remover uma que você não usa:

nvm uninstall 18
nvm cache clear

nvm cache clear apaga os downloads do Node em cache.

fnm

fnm list
fnm uninstall 18

fnm list mostra as versões instaladas e fnm uninstall remove uma (comandos do fnm). Vale o mesmo aviso: você pode instalá-la de novo com fnm install.

Uma rotina simples

Uma vez por mês, rode o find do Passo 1 e apague as node_modules dos projetos que você não mexe há meses, e depois rode pnpm store prune se você usa pnpm. Limpe o cache do npm ou do yarn só quando precisar mesmo do espaço. Se você também cria apps para Apple ou usa containers, leia como apagar o DerivedData do Xcode com segurança e Docker prune no Mac. Para o resto do disco, veja como liberar espaço no Mac ou baixe o Pruneo de graça.

Perguntas frequentes

É seguro apagar a node_modules?

Sim, dentro dos seus próprios projetos. A pasta é recriada a partir do package.json e do lock file com npm install, pnpm install ou yarn install. Não apague pastas node_modules que pertencem a apps instalados ou a ferramentas globais.

Devo rodar npm cache clean --force?

Só para recuperar espaço em disco. O npm diz que o cache se corrige sozinho e que limpá-lo nunca deveria ser necessário por outro motivo. Use npm cache verify primeiro.

O pnpm store prune quebra os meus projetos?

Não. O pnpm diz que ele só remove pacotes que nenhum projeto referencia e não tem efeitos colaterais nos seus projetos. Um install futuro pode baixar de novo um pacote removido.

Onde fica o store do pnpm no Mac?

Por padrão em ~/Library/pnpm/store, a menos que PNPM_HOME ou XDG_DATA_HOME esteja definido. Rode pnpm store path para ver a localização exata.

Experimente com o Pruneo

Grátis para macOS 14 ou posterior. Tudo o que ele limpa pode ser recuperado na quarentena.

Pruneo é para Mac

Envie o link para você e baixe no seu Mac. É grátis e sem conta.

Enviar por e-mail
Baixar mesmo assim