Npm betikleri çalıştırılırken çıktı nasıl bastırılır


93

Bir inşa aracı olarak npm betikleri ile denemeye karar verdim ve şimdiye kadar hoşuma gitti. Çözmek istediğim bir sorun, jshint'i çalıştırmak için bir komut dosyası çalıştırırken, bir şey linting geçmediğinde bir ton "npm ERR!" Alıyorum! çizgiler. Linterden gelen çıktı daha anlamlı olduğu için bunları bastırmak istiyorum.

Bunu genel olarak ayarlamanın iyi bir yolu var mı ve çalıştırılan her komut dosyası için ayarlamanın bir yolu var mı?

node.js  npm 


Bu konuyla ilgili bir sorun var: github.com/npm/npm/issues/6124
daotoad

Yanıtlar:


159

Tüm komut dosyaları:

Günlük seviyesini silentbirkaç şekilde ayarlayarak genel olarak npm çıktısını bastırarak bunu düzeltebilirsiniz :

Her npm runçağrıda:

npm run --silent <your-script>

Veya genel olarak bir .npmrcdosya oluşturarak (bu dosya proje dizininizde veya ana klasörünüzde olabilir) aşağıdakilerle:

loglevel=silent

Kaynaklar:

npm günlük düzeyi yapılandırması: https://docs.npmjs.com/misc/config#loglevel

npmrc: https://docs.npmjs.com/misc/config#loglevel

Her komut dosyası, ayrı ayrı:

Linting gibi belirli komut dosyalarında bu sorunu aşmak için kullandığım basit bir numara || true, bu tür komut dosyalarının sonuna eklemektir . Bu, herhangi bir npm yapılandırma değişikliği olmadan çalışacaktır.

Bu, komut dosyasının her zaman bir 0durumla çıkmasını sağlayacaktır . Bu, npm'yi betiğin başarılı olduğunu düşünmeye, dolayısıyla ERRmesajları gizlemeye yönlendirir . Daha açık olmak istiyorsanız, || exit 0bunun yerine ekleyebilirsiniz ve aynı sonucu elde etmelidir.

{
  "scripts": {
    "lint": "jshint || true",
   }
}

|| npm çalıştırmasının sonuna bağımsız değişken eklemeye çalışıyorsanız true çalışmaz - ör. npm run myCmd - --deploy
arcseldon

4
Bu gerçekten oldukça saçma (sizi suçlamak değil). Eklemek istemiyorum || true; bu iyi bir çözüm değil. Kullanarak diğer TÜM komutları susturmak istemiyorum .npmrc. Ve bu belirli betiği sürekli çalıştırmak -sda çok aptalca görünüyor. Tek bir komut dosyasını susturmak için daha iyi bir çözüm bulan oldu mu?
PascalVKooten

Başka birinin bununla karşılaşması durumunda, açık bir sorun vardır - bkz. Github.com/npm/npm/issues/8821 .
Ian Routledge

loglevel = sessiz bana aşırı geliyor. Bu, hata mesajlarını bile susturur (yine de yerel bir dosyaya yazılırlar). Bu öneriden hemen sonraki bağlantıya göre, öncelik sırasına göre olası günlük seviyeleri şunlardır: "sessiz", "hata", "uyarı", "uyarı", "http", "zamanlama", "bilgi", "ayrıntılı "," aptal ". Ya "hata" (uyarıları bastırır, ancak hataları gösterir) veya "uyarı" (uyarıları içerir) öneririm. Normalde npm'nin bize neyin çalıştırılacağına nasıl karar verdiğini göstermesi için bir neden yoktur, varsayılan olarak yaptığı budur. Bu, metin hata ayıklama gibi geliyor.
John Deighan

Tamam, kendimi düzeltmem ve itiraz etmem gerekiyor. Belki bir node.js hatasıdır? 'Loglevel = error' ile bir .npmrc dosyası oluşturduğumda, 'npm testi' çalıştırmak hala npm'nin hangi komut satırının çalıştırılacağını nasıl belirlediğiyle ilgili mantığını takip ediyordu. Düğüm sürümü 8.12.0, npm sürümü 5.8.0.
John Deighan

44

Hem --quietve hem de --silentseçenekleri aşağıdaki gibi kullanabilmelisiniz:

npm install --quiet

--quietstderr ve uyarılar gösterecek, --silentneredeyse her şeyi bastırmalı

Stdout / stderr'i şu şekilde gönderebilirsiniz /dev/null:

npm install > "/dev/null" 2>&1

veya daha az çeşitlilik

npm install &> /dev/null

7
Windows'ta npm yükleme --quiet> NUL
Manohar Reddy Poreddy

4
Bu soru özellikle npm komut dosyalarını çalıştırmakla ilgilidir .
hackel

7
npm install --quiet --no-progress 

Uyarıları ve hataları saklayacak ve onu destekleyen terminallerdeki ADHD ilerleme çubuğunu bastıracaktır.


3
Bu soru özellikle npm komut dosyalarını çalıştırmakla ilgilidir .
hackel

1

Olay dinleyicilerini kaldırarak bunu komut dosyanızın içinde yapabilirsiniz.

#!/usr/bin/env node

process.removeAllListeners('warning');

// Do your thang without triggering warnings
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.