Como limpar a pasta node_modules dos pacotes que não estão no package.json?


338

Suponha que eu instale os pacotes do projeto npm installque analisem os package.jsonmódulos a serem instalados. Depois de um tempo, vejo que não preciso de um módulo específico e removo sua dependência de package.json. Depois, removo alguns outros módulos package.jsonporque não são mais necessários e outros são substituídos por alternativas.

Agora eu quero limpar a node_modulespasta para que apenas os módulos listados package.jsonfiquem lá e o restante deva ir, algo assim npm clean. Eu sei que posso removê-los manualmente, mas gostaria de ter algumas boas funcionalidades prontas para usar o açúcar.

Respostas:


407

Acho que você está procurando npm prune

npm prune [<name> [<name ...]]

Este comando remove pacotes "estranhos". Se um nome de pacote for fornecido, apenas os pacotes correspondentes a um dos nomes fornecidos serão removidos.

Pacotes estranhos são aqueles que não estão listados na lista de dependências do pacote pai.

Consulte os documentos: https://docs.npmjs.com/cli/prune


11
Até onde eu sei, na nova versão do NPM, todas as dependências estão localizadas na node_modulespasta raiz , e não como antes, onde cada dependência tinha suas próprias dependências instaladas em suas próprias node_modulespastas ... com inúmeras cópias das mesmas dependências ... então npm pruneleva isso em consideração? porque essas dependências profundas não estão escritas na parte principal package.jsondo seu projeto. A remoção deve ser recursiva.
— vsync

2
@vsync A redução de duplicação é obtida com o comando npm dedupe docs.npmjs.com/cli/dedupe . Ele tenta simplificar a árvore de nós, movendo as dependências para cima na árvore.
— knaos

Eu vi a remoção do NPM falhar ao excluir as coisas que geralmente estão estragando quando o meu repositório corporativo tem algo errado. Então eu tenho que rm-rf. Seria bom se houvesse um "golpe Everythin fora tudo em seguida, ReGet tudo de uma só vez" comando
— ggb667

209

Você pode remover sua pasta node_modules / e reinstalar as dependências do package.json.

rm -rf node_modules/
npm install

Isso apagaria todos os pacotes instalados na pasta atual e instalaria apenas as dependências do package.json. Se as dependências foram instaladas anteriormente, o npm tentará usar a versão em cache, evitando o download da dependência pela segunda vez.


4
Sim, eu sei que posso usar esse método, mas estou curioso para saber por que ainda não há uma solução mais elegante para isso.
— Sergei Basharov

Não há realmente nenhum comando npm para excluir node_modules além de excluir a pasta?
— Anders

4
Na plataforma Windows, ele falha ao excluir node_modules através do Explorer ou da linha de comando (já que o caminho para alguns módulos é maior que 256). Deve haver um comando npm para fazer isso de uma maneira mais limpa.
— Ravi Kumar

9
Ou usando rmdir node_modules /s /qno Windows. superuser.com/a/179661/440976
— Wédney Yuri

5
Penso que esta resposta está faltando um ponto muito importante: se você está limitado pelo tráfego (ou seja, você tem a conexão cara por megabyte paga como móvel) e tem muitos módulos, isso pode custar a você , enquanto a pruneopção requer que você tenha conexão com a Internet.
— Ivan Kolmychek

102

Devido ao seu aninhamento de pastas, o Windows não pode excluir a pasta, pois seu nome é muito longo. Para resolver isso, instale o RimRaf:

npm install rimraf -g

rimraf node_modules

8
Ou apenasrm -rf node_modules
— kappaallday

16
rm -rf node_modulesnão funcionará no Windows. Veja esta solução: superuser.com/a/179661/440976
— Wédney Yuri

11
Win7 x64 rimraf trabalhou muito através PowerShell .. obrigado
— gorelative

Melhor solução para Windows 10 de 64 bits via CMD
— Matt Cromwell

rm -rf node_modules não funcionou para mim no Windows 10. Mas rimraf funcionou para mim
— ssmsnet

24

simples, basta correr

rm -r node_modules

de fato, você pode excluir qualquer pasta com isso.

como rm -r AnyFolderWhichIsNotDeletableFromShiftDeleteOrDelete .

basta abrir o gitbash mover para a raiz da pasta e executar este comando

Espero que isso ajude.


2
Não funcionar, eu recebo uma "permissão negada" erro (usando gitbash.
— drake035

3
abra o gitbash no modo de administrador. Eu acho que isso vai ajudar. ou configurações de nível de permissão pasta mudança
— Ajay Kotnala

3
Isso excluiria todos os pacotes. O OP diz claramente "Quero limpar a pasta node_modules para que apenas os módulos listados no package.json fiquem lá".
— Boaz - Restabelece Monica

nesse caso, meu amigo, você pode simplesmente "npm uninstall package_name" ou --save como sufixo que excluirá sua entrada do arquivo package.json também. npm desinstalar package_name (excluir pacote) npm desinstalar package_name --save (excluir pacote e remover entrada de dependências no pacote json) npm desinstalar package_name --save-dev (excluir pacote e remover entrada de devdependencies no pacote json)
— Ajay Kotnala

22

Primeira instalação global do rimraf

npm install rimraf -g

vá para o caminho usando cmd em que sua pasta node_modules e aplique o comando abaixo

rimraf node_modules

boa resposta, mas instalar um pacote para desinstalar outros não é uma boa ideia. npm pruneé uma solução ideal.
— Binayak Gouri Shankar 11/03

Sim, mas se você deseja remover a pasta node_module do seu projeto, esta é a melhor e mais fácil.
— Ankit Parmar


9

da versão 6.5.0 npm suporta o comando clean-installpara atualizar todos os pacotes


11
Isso é exatamente o que eu precisava. Quando eu atualizo o nó, a primeira coisa que acontece é "parece que você mudou seu ambiente desde a execução do 'npm install'". Como eu já estou no console, é mais fácil simplesmente limpa a instalar em vez de andar apagar pastas primeira etc.
— Jarrod McGuire

3

Eu adicionei algumas linhas dentro do package.json:

"scripts": {
  ...
  "clean": "rmdir /s /q node_modules",
  "reinstall": "npm run clean && npm install",
  "rebuild": "npm run clean && npm install && rmdir /s /q dist && npm run build --prod",
  ...
}

Se você quiser cleanapenas você pode usar este rimraf node_modulesou rm -rf node_modules.

Funciona bem



1

O melhor artigo que encontrei sobre este é este: https://trilon.io/blog/how-to-delete-all-nodemodules-recursively

Tudo a partir do console e fácil de executar a partir de qualquer ponto da pasta.

Mas, como resumo do artigo, este comando para encontrar o tamanho de cada node_modulepasta encontrada em projetos diferentes.

find . -name "node_modules" -type d -prune -print | xargs du -chs

E para realmente removê-los:

find . -name 'node_modules' -type d -prune -print -exec rm -rf '{}' \;

O artigo também contém instruções para o shell do Windows.


0

Remova / edite os pacotes que não são necessários no package-lock.json (os nomes dos pacotes serão escritos em dependencies & devDependencies) e, em seguida,

npm install


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.