Package.json içinde olmayan paketlerin node_modules klasörü nasıl temizlenir?


338

Ben proje paketleri yükleme varsayalım npm installiçine görünüyor package.jsonmodülleri yüklü olması için. Bir süre sonra belirli bir modüle ihtiyaç duymadığımı ve bağımlılığını kaldırdığımı görüyorum package.json. Sonra diğer modülleri kaldırıyorum package.jsonçünkü artık ihtiyaç duyulmuyor ve diğerleri alternatiflerle değiştiriliyor.

Şimdi node_modulesklasörü temizlemek istiyorum sadece package.jsonorada listelenen modüller orada kalmak ve geri kalanı gitmek gerekir, gibi bir şey npm clean. Bunları manuel olarak kaldırabileceğimi biliyorum, ancak bunun için kullanıma hazır şeker işlevselliğine sahip olmak istiyorum.

Yanıtlar:


407

Bence sen arıyorsun npm prune

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

Bu komut "gereksiz" paketleri kaldırır. Bir paket adı verilirse, yalnızca verilen adlardan biriyle eşleşen paketler kaldırılır.

Harici paketler, üst paketin bağımlılıklar listesinde listelenmeyen paketlerdir.

Dokümanlara bakın: https://docs.npmjs.com/cli/prune


1
Bildiğim kadarıyla, yeni NPM sürümünde, tüm bağımlılıklar daha node_modulesönce olduğu gibi kök klasörde bulunur , burada her bağımlılığın kendi node_modulesklasörlerine kendi bağımlılıkları yüklendi ... aynı bağımlılıkların sayısız kopyasıyla ... böylece gelmez npm prunebu göz önünde bulundurur? çünkü bu derin bağımlılıklar package.jsonprojenizin ana kısmına yazılmaz .. kuru erik özyinelemeli görünmelidir.
vsync

2
@vsync Çoğaltma azaltımı npm dedupe docs.npmjs.com/cli/dedupe komutuyla gerçekleştirilir . Bağımlılıkları ağacın üzerine taşıyarak düğüm ağacını basitleştirmeye çalışır.
knaos

NPM kuru erik, kurumsal havuzumda bir şey olduğunda genellikle berbat olan şeyleri silemediğini gördüm. Sonra rm-rf'ye ihtiyacım var. Bir "darbe her şey uzakta sonra her şeyi tek bir seferde
reet

210

Node_modules / klasörünüzü kaldırabilir ve sonra bağımlılıkları package.json'dan yeniden yükleyebilirsiniz.

rm -rf node_modules/
npm install

Bu işlem, geçerli klasördeki tüm yüklü paketleri siler ve yalnızca package.json bağımlılıklarını yükler. Bağımlılıklar önceden yüklenmişse, npm önbelleğe alınmış sürümü kullanmaya çalışarak bağımlılığı ikinci kez indirmekten kaçınır.


4
Evet, bu yöntemi kullanabileceğimi biliyorum ama bunun için neden hala daha zarif bir çözüm olmadığını merak ediyorum.
Sergei Basharov

Klasörü silmek dışında node_modules'ü silmek için gerçekten npm komutu yok mu?
Anders

4
Windows platformunda, Explorer veya komut satırı üzerinden node_modules silinirken başarısız olur (bazı modüllerin yolu 256'dan uzun olduğu için). Daha temiz bir şekilde yapmak için npm komutu olmalıdır.
Ravi Kumar

9
Veya rmdir node_modules /s /qWindows'ta kullanarak . superuser.com/a/179661/440976
Wédney Yuri

5
Bence, bu cevap çok önemli bir noktayı kaçırıyor: trafik tarafından kısıtlanmışsanız (yani mobil gibi megabayt başına pahalı bağlantıya sahipseniz) ve çok fazla modülünüz varsa, bu size mal olabilir , pruneseçenek internet bağlantınızın olmasını gerektirmez.
Ivan Kolmychek

102

Klasörü iç içe yerleştirmesi nedeniyle, adı çok uzun olduğu için Windows klasörü silemiyor. Bunu çözmek için RimRaf'ı yükleyin:

npm install rimraf -g

rimraf node_modules

8
Veya sadecerm -rf node_modules
kappaallday

16
rm -rf node_modulespencerelerde çalışmaz. Bu çözümü görün: superuser.com/a/179661/440976
Wédney Yuri

1
win7 x64 rimraf PowerShell ile harika çalıştı .. teşekkürler
gorelative

CMD ile Windows 10 64 bit için en iyi çözüm
Matt Cromwell

rm -rf node_modules Windows 10'da benim için çalışmadı. Ama rimraf benim için çalıştı
ssmsnet

24

basit sadece koş

rm -r node_modules

aslında, bununla herhangi bir klasörü silebilirsiniz.

rm -r gibi AnyFolderWhichIsNotDeletableFromShiftDeleteOrDelete .

sadece klasörün kök dizinine gitbash hareketini açın ve bu komutu çalıştırın

Umarım bu yardımcı olur.


2
Çalışmıyor, "izin reddedildi" hatası alıyorum (gitbash kullanarak
drake035

3
gitbash'ı yönetici modunda açın. sanırım bu yardımcı olacak. izin düzeyi ayarlarını değiştirme veya değiştirme
Ajay Kotnala

3
Bu, tüm paketleri silecektir . OP açıkça "bende_modules klasörünü temizlemek istiyorum, böylece sadece package.json'da listelenen modüller orada kalsın" diyor.
Boaz

bu durumda arkadaşım girişini package.json dosyasından da silen "npm uninstall package_name" veya - sufix olarak kaydedebilirsiniz. npm kaldırma package_name (paketi sil) npm kaldırma package_name --save (paketi sil ve json paketindeki bağımlılıklardan girişi kaldır) npm kaldırma package_name --save-dev (paketi sil ve json paketindeki sapmalardan girişi kaldır)
Ajay Kotnala

22

Global olarak kurulan ilk rimraf

npm install rimraf -g

node_modules klasörünüzün bulunduğu cmd kullanarak yola gidin ve aşağıdaki komutu uygulayın

rimraf node_modules

iyi yanıt, ancak başkalarını kaldırmak için bir paket yüklemek iyi bir fikir değildir. npm pruneideal bir çözümdür.
Binayak Gouri Shankar

Evet, ancak node_module klasörünü projenizden kaldırmak istiyorsanız, bu en iyi ve kolay yoldur.
Ankit Parmar


9

6.5.0 sürümünden itibaren npm clean-installtüm paketleri yenileme komutunu destekler


1
Tam da ihtiyacım olan şey bu. Düğümü güncellediğimde, gerçekleşen ilk şey "npm install" komutunu çalıştırdığından beri ortamınızı değiştirmişsiniz gibi görünüyor. " Zaten konsolda olduğum için, önce klasörleri silmeyi karıştırmak yerine temiz kurulum yapmak en kolay
Jarrod McGuire

3

Package.json içine birkaç satır ekledim:

"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",
  ...
}

İsterseniz cleansadece bunu kullanabilirsiniz rimraf node_modulesya rm -rf node_modules.

İyi çalışıyor



1

Bu konuda bulduğum en iyi makale bu: https://trilon.io/blog/how-to-delete-all-nodemodules-recursively

Tüm konsoldan ve herhangi bir klasör noktasından yürütmek kolaydır.

Ancak makalenin bir özeti olarak, bu komut node_modulefarklı projelerde bulunan her klasörün boyutunu bulmak için .

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

Ve aslında onları kaldırmak için:

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

Makale ayrıca windows kabuğu için talimatlar içerir.


0

Package-lock.json dosyasında gerekli olmayan paketleri kaldırın / düzenleyin (paket adları bağımlılıklar & devDependencies altında yazılır) ve sonra

npm install


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.