Come pulire la cartella node_modules dei pacchetti che non si trovano in package.json?


338

Supponiamo che io installi i pacchetti di progetto con npm installquello cerca i package.jsonmoduli da installare. Dopo un po 'vedo che non ho bisogno di alcun modulo specifico e ne rimuovo la dipendenza package.json. Quindi rimuovo alcuni altri moduli package.jsonperché non sono più necessari e altri vengono sostituiti con alternative.

Ora voglio pulire la node_modulescartella in modo che solo i moduli elencati package.jsonrimangano lì e il resto deve andare, qualcosa del genere npm clean. So che posso rimuoverli manualmente ma vorrei avere alcune funzionalità di zucchero pronte per l'uso per quello.

Risposte:


407

Penso che tu stia cercando npm prune

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

Questo comando rimuove i pacchetti "estranei". Se viene fornito un nome di pacchetto, vengono rimossi solo i pacchetti che corrispondono a uno dei nomi forniti.

I pacchetti estranei sono pacchetti che non sono elencati nell'elenco delle dipendenze del pacchetto padre.

Consulta i documenti: https://docs.npmjs.com/cli/prune


1
Per quanto ne so, nella nuova versione di NPM, tutte le dipendenze si trovano nella node_modulescartella principale , e non come prima, dove ogni dipendenza aveva le proprie dipendenze installate nelle proprie node_modulescartelle ... con innumerevoli copie delle stesse dipendenze ... quindi lo npm pruneprende in considerazione? perché quelle dipendenze profonde non sono scritte sul progetto principale package.json.. la prugna deve apparire in modo ricorsivo.
vsync

2
@vsync La riduzione della duplicazione si ottiene con il comando npm dedupe docs.npmjs.com/cli/dedupe . Cerca di semplificare l'albero dei nodi spostando le dipendenze nell'albero.
knaos

Ho visto che la prugna NPM non riesce a eliminare le cose che di solito si rovinano quando il mio repository aziendale ha qualcosa di ostruito. Quindi devo rm-rf. Sarebbe bello se ci fosse un colpo "soffia via tutto e poi registri tutto tutto in una volta" comando
ggb667

210

È possibile rimuovere la cartella node_modules / e quindi reinstallare le dipendenze da package.json.

rm -rf node_modules/
npm install

Ciò eliminerebbe tutti i pacchetti installati nella cartella corrente e installerebbe solo le dipendenze da package.json. Se le dipendenze sono state precedentemente installate, npm tenterà di utilizzare la versione memorizzata nella cache, evitando di scaricare una seconda volta la dipendenza.


4
Sì, so di poter usare questo metodo, ma sono curioso di sapere perché non esiste ancora una soluzione più elegante per questo.
Sergei Basharov,

Non esiste davvero alcun comando npm per eliminare node_modules oltre all'eliminazione della cartella?
Anders,

4
Sulla piattaforma Windows, non riesce durante l'eliminazione di node_modules tramite Explorer o la riga di comando (poiché il percorso di alcuni moduli è più lungo di 256). Dovrebbe esserci il comando npm per farlo in modo più pulito.
Ravi Kumar,

9
O usando rmdir node_modules /s /qsu Windows. superuser.com/a/179661/440976
Wédney Yuri

5
Penso che a questa risposta manchi un punto molto importante: se sei limitato dal traffico (cioè hai la costosa connessione per megabyte pagata come il cellulare) e hai molti moduli, questo può costarti , mentre l' pruneopzione richiede di disporre di una connessione Internet.
Ivan Kolmychek,

103

A causa della nidificazione delle cartelle, Windows non può eliminare la cartella poiché il suo nome è troppo lungo. Per risolvere questo problema, installa RimRaf:

npm install rimraf -g

rimraf node_modules

8
O semplicementerm -rf node_modules
kappaallday

16
rm -rf node_modulesnon funzionerà su Windows. Vedi questa soluzione: superuser.com/a/179661/440976
Wédney Yuri

1
win7 x64 rimraf ha funzionato alla grande con PowerShell .. grazie
gorelative il

La migliore soluzione per Windows 10 a 64 bit tramite CMD
Matt Cromwell,

rm -rf node_modules non ha funzionato per me su Windows 10. Ma rimraf ha funzionato per me
ssmsnet

24

semplice appena eseguito

rm -r node_modules

in effetti, puoi eliminare qualsiasi cartella con questo.

come rm -r AnyFolderWhichIsNotDeletableFromShiftDeleteOrDelete .

basta aprire gitbash spostarsi sulla radice della cartella ed eseguire questo comando

Spero che questo possa aiutare.


2
Non funziona, ricevo un errore "permesso negato" (usando gitbash.
drake035

3
apri gitbash in modalità amministratore. Immagino che sarà di aiuto. o modifica le impostazioni del livello di autorizzazione delle cartelle
Ajay Kotnala

3
Ciò eliminerebbe tutti i pacchetti. L'OP dice chiaramente "Voglio pulire la cartella node_modules in modo che rimangano solo i moduli elencati in package.json".
Boaz,

in tal caso, amico mio, puoi semplicemente fare "npm uninstall nome_pacchetto" o --save come sufisso che cancellerà anche la sua voce dal file package.json. npm uninstall nome_pacchetto (elimina pacchetto) npm disinstallazione nome_pacchetto --save (elimina pacchetto e rimuove la voce dalle dipendenze nel pacchetto json) npm disinstalla pacchetto nome -save-dev (elimina pacchetto e rimuove la voce dalle devdipendenze nel pacchetto json)
Ajay Kotnala

22

Prima installa globalmente rimraf

npm install rimraf -g

vai al percorso usando cmd in cui la cartella node_modules e applica sotto il comando

rimraf node_modules

buona risposta, ma installare un pacchetto per disinstallarne altri non è una buona idea. npm pruneè una soluzione ideale.
Binayak Gouri Shankar,

Sì, ma se vuoi rimuovere la cartella node_module dal tuo progetto, questo è il modo migliore e semplice.
Ankit Parmar


9

dalla versione 6.5.0 npm supporta il comando clean-installper aggiornare duramente tutti i pacchetti


1
Questo è esattamente ciò di cui avevo bisogno. Quando aggiorno il nodo, la prima cosa che succede è "sembra che tu abbia cambiato il tuo ambiente da quando hai eseguito 'npm install'". Dal momento che sono già nella console, è più semplice fare solo l'installazione pulita piuttosto che scherzare eliminando prima le cartelle ecc.
Jarrod McGuire,

3

Ho aggiunto alcune righe all'interno di 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 vuoi cleansolo puoi usare questo rimraf node_moduleso rm -rf node_modules.

Funziona bene



1

Il miglior articolo che ho trovato al riguardo è questo: https://trilon.io/blog/how-to-delete-all-nodemodules-recursively

Tutto dalla console e facile da eseguire da qualsiasi punto della cartella.

Ma come riassunto dell'articolo, questo comando per trovare la dimensione di ogni node_modulecartella trovata in diversi progetti.

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

E per rimuoverli effettivamente:

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

L'articolo contiene anche istruzioni per la shell di Windows.


0

Rimuovere / modificare i pacchetti non necessari in package-lock.json (i nomi dei pacchetti verranno scritti in dipendenze e devDependenze) e quindi

npm install


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.