Package.json'da (NPM) listelenen tüm bağımlılıkları nasıl kaldırırsınız?


107

Uygulama npm install -gkökümde tanımlı bir package.json dosyam varsa ve çalıştırırsam , globablly, package.json'da tanımlanan tüm bağımlılıkları yükleyecektir.

Ancak, bu ters yönde çalışmıyor gibi görünüyor.

Ben yaparsam npm uninstall -gbenim uygulama kök o bunu bir paket adı geçmesine beni expceting, hata verir.

Bunun aynı zamanda kurduğum paketleri kaldırması gerekmez mi?

Yanlış bir şey mi yapıyorum?


1
Bilginize asla npm -g kullanmadım. peterlyons.com/problog/2012/09/…
Peter Lyons

1
Projeniz için bir modül kullanmak istiyorsanız, onu yerel olarak kurmanız gerektiğini unutmayın. Bir modülü global olarak kurmak, örneğin expressjs ve express (1) ile olduğu gibi, terminalinizde yalnızca daha fazla komut sağlar.
warchimede

@sgwilly Node_modules'i global olarak kullanmak zorunda olduğunuz konusunda yanılıyorsunuz - hatta dokümantasyonda öyle diyor - nodejs.org/api/modules.html#modules_all_together - require () fonksiyonu, çeşitli konumlarda göründüğü için 'akıllıdır' global node_modules içeren bir modül için bir yol denemek ve çözmek için
qodeninja

Daha spesifik olmalıydım: require () 'nin global olarak kurulu modülünüzü bulacak kadar akıllı olduğu doğru. Tüm projeleriniz söz konusu modülün aynı sürümüne bağlıysa çalışacaktır. Yine de, bağımlılıkları yalnızca global olarak yönetiyorsanız, farklı modül sürümlerine dayanan projeleri sürdürmekte zorlanabilirsiniz. Bu nedenle, modülleri her zaman yerel olarak kurmak ve bunları yalnızca bazı kullanışlı çalıştırılabilir komutlara erişmek istediğinizde küresel olarak kurmak en iyi uygulamadır.
warchimede

@sgwilly - düşüncelerinizi burada paylaştığınız için teşekkürler - özellikle bu proje dağıtılabilir olduğundan hiçbir şeyi güncellemeye çalışmamalıdır - gerçekte güncellemeler RPM üzerinden gerçekleşir (RPM notu NPM değil) ve gerçek düğüm_ modülleri küçültülür - Sadece,
rpm'nin

Yanıtlar:


168

Bash kullanıyorsanız, package.json dosyanızı içeren klasöre geçin ve aşağıdakileri çalıştırın:

for package in `ls node_modules`; do npm uninstall $package; done;

Genel olarak yüklenmiş paketler söz konusu olduğunda, %appdata%/npmklasörünüze geçin (Windows'ta ise) ve aynı komutu çalıştırın.

EDIT: Bu komut npm 3.3.6 (Node 5.0) ile kesilir. Şimdi .bashrc dosyamda npm_uninstall_all ile eşleştirdiğim Bash komutunu kullanıyorum:

npm uninstall `ls -1 node_modules | tr '/\n' ' '`

Bonus eklendi mi? çok daha hızlı!

https://github.com/npm/npm/issues/10187


1
"Tüm npm modüllerini genel olarak kaldırma komutu?" Sorusuna yanıt olarak tam olarak aynı komutu gönderdiniz. Hem bu durumda hem de bu durumda yapılacak uygun şey bu nasıl olabilir?
kimse

@AndrewMedico Nasıl uygun değil? Package.json dosyanıza yüklenen paketler node_modules klasörünüze yüklenecektir. Bu komut her alt klasörü node_modules klasörüne götürür ve npm uninstall <package>her klasör için çalışır . Bunu kendim yaptım ve mükemmel çalışıyor!
jedmao

2
@UgoRobain iyi soru. Görünüşe göre, bazı bağımlılıklar gerçekten derinleşiyor. NTFS dosya sisteminde (Windows), en azından, yol adının bir çeşit sınırdan uzun olduğu dizinleri kaldırmada sorun yaşar ve bu hayali dizinleri kaldıramazsınız. Neyse ki, npm uninstallbununla ilgilenir, bu yüzden bu numara yararlıdır.
jedmao

7
Bunu powershell ile foreach($package in ls node_modules){npm uninstall $package}
yapıyordum

1
pencerelerde çalışmıyor gibi görünüyor. tr is not recognized
Overdrivr

79

Bu benim için çalıştı:

projenizdeki node_modules klasörüne komut istemi veya gitbash ardından yürütün:

npm uninstall *

O proje için tüm yerel paketleri kaldırdı.


Bu global yüklemeleri de kaldırmaz mı?
shinzou

@shinzou Benim için global yüklemeleri kaldırmadı.
Taylor Edmiston

1
Mac 10.13.5'te bu, aşağıdaki gibi birçok hata verir: "> heapdump@0.3.9 install / Users / vikramanna / node_modules / heapdump> node-gyp rebuild CXX (target) Release / obj.target / addon / src / heapdump. o ../src/heapdump.cc:17'den eklenen dosyada: ../src/compat-inl.h:300:19: hata: 'v8 :: Isolate'de' GetCpuProfiler 'adlı üye yok, izolatını döndür-> GetCpuProfiler () -> StartProfiling (title, kayıt_örnekler); "
vikramvi

35

Windows için node_modules dizinine gidin ve bunu powershell'de çalıştırın

npm uninstall (Get-ChildItem).Name 

Benim için bu, "Komut satırı çok uzun" hatasıyla sonuçlanıyor.
Daniel

29

Yakın zamanda tüm geliştirme bağımlılıklarını aşağıdaki gibi kaldırmaya izin veren bir düğüm komutu buldum:

npm prune --production

Bahsettiğim gibi, bu komut yalnızca geliştirme bağımlılık paketlerini kaldırır. En azından manuel olarak yapmak zorunda kalmamama yardımcı oldu.


8

Windows kullanıcıları için ipucu: Bu PowerShell komutunu node_modulesana dizinden çalıştırın :

ls .\node_modules | % {npm uninstall $_}

6
// forcibly remove and reinstall all package dependencies
ren package.json package.json-bak
echo {} > package.json
npm prune
del package.json
ren package.json-bak package.json
npm i

Bu, esasen sahte, boş bir package.json oluşturur npm prune, node_modules'teki her şeyi kaldırmayı çağırır , orijinal package.json dosyasını geri yükler ve her şeyi yeniden yükler.

Diğer çözümlerden bazıları daha zarif olabilir, ancak bunun daha hızlı ve ayrıntılı olduğundan şüpheleniyorum. Diğer iş parçacıklarında, insanların sadece node_modules dizinini silmeyi önerdiklerini gördüm, ancak en azından Windows için, bu, bin dizini kaybolduğu için npm'nin daha sonra boğulmasına neden oluyor. Belki Linux'ta düzgün bir şekilde geri yüklenir, ancak pencereler değil.


1
Benim durumumda - mevcut package.json'a ihtiyacım yoktu (betiği npm komut dosyaları çalıştırıldıktan sonra CI'da çalıştırdığım için ..) Bu yüzden sadece: "echo {}> package.json & npm prune"
Rikki

5

Aslında, eğer paketleri kaldırmak istiyorsanız, bunu yapmak için bir seçenek yoktur, package.jsonsadece npm lsaynı dizinde veya kaldırmak istediğiniz paket için package.jsonkullanın .npm uninstall <name>npm rm <name>


8
Bunları tek tek nasıl kaldıracağımı biliyorum - npm install ile aynı şekilde package.json dosyasında çalıştırılacak bir komut olsaydı daha mantıklı olurdu.
qodeninja

Hayır, her modülü elle kaldırmak istemiyoruz.
shinzou

1
  1. istenmeyen bağımlılıkları package.json'dan kaldırın
  2. npm i

" npm i" yalnızca eksik depoları yüklemekle kalmaz, node_modules'i package.json ile eşleşecek şekilde günceller


1

( Her şeyi okuyana kadar bu adımları tekrarlamayın )

Benim için belirtilen tüm çözümler işe yaramadı. Soo /usr/liboraya gittim ve koştum

for package in `ls node_modules`; do sudo npm uninstall $package; done;

Ama aynı zamanda npmpaketi ve paketlerin sadece yarısını da çıkardı (n harfine ulaşana kadar).

Bu yüzden düğüm kılavuzuyla düğümü tekrar kurmayı denedim.

# Using Ubuntu
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt-get install -y nodejs

Ama npmtekrar yüklenmedi .

Bu yüzden tüm düğümü sudo apt-get remove nodejs yeniden yüklemeye karar verdim ve yukarıdaki kılavuza göre tekrar kurdum .

Şimdi NPM tekrar çalışıyor ama global modüller hala orada. Bu yüzden dizinin içeriğini kontrol ettim ve /usr/lib/node_modulesburada önemli olan tek şey gibi görünüyor npm. Bu yüzden yukarıdaki komutu, hariç her şeyi kaldırmak için düzenledim.npm

for package in $(ls node_modules); do if [ "$package" != "npm" ]; then sudo npm uninstall $package; fi; done;

Önekli olmayan tüm modülleri kaldırdı @. Soo, alt dizinler için döngüyü genişlettim.

for package in $(ls node_modules); do if [  ${package:0:1} = \@ ]; then 
        for innerPackage in $(ls node_modules/${package}); do
                sudo npm uninstall "$package/$innerPackage";
        done;
fi; done;

Benim /usr/lib/node_modulesartık sadece npmve bağlantılı paketleri içeriyor .


1

Başka bir BASİT seçenek node_modules ve package-lock.json'u silmektir.

rm -rf node_modules
rm -rf package-lock.json

Bundan sonra npm paketlerini yeniden yüklemeyi deneyebilirsiniz.


Bu öneri için teşekkürler. Küresel paketim yoktu. Çoğu yanıt -g seçeneğinden bahsediyor! TÜM yerel paketlerden kurtulmak için çok kötü zaman geçirdim çünkü nodejs / npm hakkında yeterince bilgim olmadığından, 'npm bunu-ve-bunu' birkaç farklı dizinden kurdum. 'Npm uninstall <anything>' kullandığımda, 'npm ls' hala bazı paketleri gösteriyor. Ben kabuk programcısıyım, bu yüzden 'npm ls' çıktısının akla gelebilecek her parçası üzerinde 'npm kaldırmayı' denedim. Hiçbiri TÜM paketlerden kurtulmaya çalışmadı. Yorgun ama bu öneriyi buldum ve sorunumu 5 dakika içinde düzelttim. Teşekkürler Sert.
BReddy

Package.json, package-lock.json, node_modules, bağımlılıklar, yerel / global farklılıklar veya nodejs / npm'nin nasıl çalıştığını bilmiyorum. Başka bir program için gerekli olan nodejs modülünü kullanıyorum. Farklı dizinlerden 'npm install' ile birçok farklı modül kurduğum için TÜMÜNÜ bir defada ortadan kaldırmak istedim. Diğer cevapların hiçbiri bundan bahsetmiyor. Linux'ta bu ve 'bul' komutunu kullanarak her şeyden 5 dakikada kurtulabildim. Bunu henüz neden başka kimsenin yararlı bulmadığını bilmiyorum.
BReddy

0

Bunun için döngüyü çalıştırmanıza bile gerek yok.

Tek tek komutu kullanarak tüm node_modules'i silebilirsiniz: -

npm uninstall `ls -1 node_modules | tr '/\n' ' '`

0

Powershell kullanıcıları: foreach($package in ls node_modules){npm uninstall $package}

Teşekkürler @JustMailer


0

Piggy-backing off of VIKAS KOHLI ve Jedmao'dan , bunu yapabilirsin

tek satırlı versiyon:

npm uninstall `ls -1 node_modules | grep -v ^@ | tr '/\n' ' '` `find node_modules/@* -type d -depth 1 2>/dev/null | cut -d/ -f2-3 | tr '\n' ' '`

çok çizgili versiyon:

npm uninstall \
`ls -1 node_modules | grep -v ^@ | tr '/\n' ' '` \
`find node_modules/@* -type d -depth 1 2>/dev/null | cut -d/ -f2-3 | tr '\n' ' '`
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.