So unterdrücken Sie die Ausgabe beim Ausführen von npm-Skripten


92

Ich habe beschlossen, mit npm-Skripten als Build-Tool zu experimentieren, und bisher gefällt es mir. Ein Problem, das ich lösen möchte, ist das Ausführen eines Skripts zum Ausführen von jshint, wenn etwas nicht flusen kann. Ich erhalte eine Menge "npm ERR!" Linien. Ich möchte diese unterdrücken, da die Ausgabe vom Linter aussagekräftiger ist.

Gibt es eine gute Möglichkeit, dies global festzulegen, und gibt es eine Möglichkeit, es für jeden Skriptlauf festzulegen?

node.js  npm 


Es gibt ein Problem zu diesem Thema unter: github.com/npm/npm/issues/6124
daotoad

Antworten:


157

Alle Skripte:

Sie können dies beheben, indem Sie die Ausgabe von npm insgesamt unterdrücken und die Protokollstufe auf verschiedene silentArten einstellen :

Bei jedem npm runAufruf:

npm run --silent <your-script>

Oder global durch Erstellen einer .npmrcDatei (diese Datei kann sich entweder in Ihrem Projektverzeichnis oder in Ihrem Basisordner befinden) mit den folgenden Optionen:

loglevel=silent

Ressourcen:

Konfiguration der npm-Protokollebene: https://docs.npmjs.com/misc/config#loglevel

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

Jedes Skript einzeln:

Ein einfacher Trick, den ich verwendet habe, um dieses Problem bei bestimmten Skripten wie Flusen zu umgehen, besteht darin, || trueam Ende solcher Skripte anzuhängen . Dies funktioniert ohne Änderungen der npm-Konfiguration.

Dadurch wird sichergestellt, dass das Skript immer mit einem 0Status beendet wird. Dies bringt npm dazu, zu glauben, dass das Skript erfolgreich ist, und versteckt somit die ERRNachrichten. Wenn Sie expliziter sein möchten, können Sie || exit 0stattdessen anhängen, und es sollte das gleiche Ergebnis erzielt werden.

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

|| true funktioniert nicht, wenn Sie versuchen, Argumente an das Ende des npm-Laufs anzuhängen - z. npm run myCmd - --deploy
arcseldon

4
Das ist wirklich ziemlich absurd (ohne dich zu beschuldigen). Ich möchte nicht anhängen || true. das ist keine gute lösung. Ich möchte nicht ALLE anderen Befehle mit stumm schalten .npmrc. Und dieses spezielle Skript -sständig auszuführen, scheint ebenfalls sehr dumm zu sein. Hat jemand eine bessere Lösung gefunden, um ein einzelnes Skript zum Schweigen zu bringen?
PascalVKooten

Falls jemand anderes darauf stößt, gibt es ein offenes Problem - siehe github.com/npm/npm/issues/8821 .
Ian Routledge

loglevel = Silent scheint mir übertrieben. Das würde sogar Fehlermeldungen zum Schweigen bringen (obwohl sie immer noch in eine lokale Datei geschrieben würden). Laut dem Link kurz nach diesem Vorschlag sind die möglichen Protokollebenen in der Prioritätsreihenfolge: "stumm", "Fehler", "warnen", "bemerken", "http", "Timing", "info", "ausführlich" ", "dumm". Ich würde entweder "Fehler" (der Warnungen unterdrücken, aber Fehler anzeigen) oder "Warnung" (der Warnungen enthalten würde) vorschlagen. Normalerweise gibt es für npm keinen Grund, uns zu zeigen, wie es entscheidet, was ausgeführt werden soll, was standardmäßig der Fall ist. Das fühlt sich an wie das Debuggen von Text.
John Deighan

OK, ich muss mich korrigieren und Einspruch erheben. Vielleicht ist es sogar ein node.js-Fehler? Als ich eine .npmrc-Datei mit 'loglevel = error' erstellt habe, wurde beim Ausführen von 'npm test' immer noch die Logik von npm nachverfolgt, wie bestimmt wurde, welche Befehlszeile ausgeführt werden soll. Knotenversion 8.12.0, npm Version 5.8.0.
John Deighan

44

Sie sollten beide die nutzen können --quietund --silentOptionen, wie in

npm install --quiet

--quietwird stderr und Warnungen anzeigen, --silentsollte fast alles unterdrücken

Sie können stdout / stderr /dev/nullauch wie folgt senden :

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

oder weniger versbose

npm install &> /dev/null

7
Unter Windows ist es npm install --quiet> NUL
Manohar Reddy Poreddy

4
In dieser Frage geht es speziell um das Ausführen von npm- Skripten .
Hackel

7
npm install --quiet --no-progress 

Behält Warnungen und Fehler bei und unterdrückt den ADHS-Fortschrittsbalken auf Terminals, die ihn unterstützen.


3
In dieser Frage geht es speziell um das Ausführen von npm- Skripten .
Hackel

1

Sie können dies in Ihrem Skript tun, indem Sie die Ereignis-Listener entfernen

#!/usr/bin/env node

process.removeAllListeners('warning');

// Do your thang without triggering warnings
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.