Comment supprimer la sortie lors de l'exécution de scripts npm


93

J'ai décidé d'expérimenter les scripts npm comme outil de construction et jusqu'à présent, je l'aime bien. Un problème que j'aimerais résoudre est lors de l'exécution d'un script pour exécuter jshint lorsque quelque chose ne passe pas le linting, j'obtiens une tonne de "npm ERR!" lignes. Je voudrais les supprimer car la sortie du linter est plus significative.

Existe-t-il un bon moyen de définir cela globalement et existe-t-il un moyen de le définir pour chaque exécution de script?

node.js  npm 

Possible duplication des erreurs
Gajus

Il y a un problème à ce sujet sur: github.com/npm/npm/issues/6124
daotoad

Réponses:


159

Tous les scripts:

Vous pouvez résoudre ce problème en supprimant la sortie de npm dans son ensemble, en définissant le niveau de journalisation de silentplusieurs manières:

À chaque npm runinvocation:

npm run --silent <your-script>

Ou globalement en créant un .npmrcfichier (ce fichier peut être dans le répertoire de votre projet ou dans votre dossier de départ) avec les éléments suivants:

loglevel=silent

Ressources:

Configuration du niveau de journalisation npm: https://docs.npmjs.com/misc/config#loglevel

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

Chaque script, individuellement:

Une astuce simple que j'ai utilisée pour contourner ce problème sur certains scripts comme le linting est d'ajouter || trueà la fin de ces scripts. Cela fonctionnera sans aucun changement de configuration npm.

Cela garantira que le script se terminera toujours avec un 0statut. Cela incite npm à penser que le script réussit, cachant ainsi les ERRmessages. Si vous voulez être plus explicite, vous pouvez ajouter à la || exit 0place et cela devrait aboutir au même résultat.

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

|| true ne fonctionne pas si vous essayez d'ajouter des arguments à la fin de l'exécution de npm - par exemple. npm run myCmd - --deploy
arcseldon

4
C'est vraiment assez absurde (ne pas vous blâmer). Je ne veux pas ajouter || true; ce n'est pas une bonne solution. Je ne veux pas désactiver TOUTES les autres commandes en utilisant .npmrc. Et exécuter ce script particulier avec -stout le temps semble également très ridicule. Quelqu'un a-t-il trouvé une meilleure solution pour faire taire un seul script?
PascalVKooten

Au cas où quelqu'un d'autre rencontrerait cela, il y a un problème ouvert - voir github.com/npm/npm/issues/8821 .
Ian Routledge

loglevel = silent me semble exagéré. Cela ferait taire même les messages d'erreur (bien qu'ils soient toujours écrits dans un fichier local). Selon le lien suivant cette suggestion, les niveaux de journalisation possibles, par ordre de priorité, sont: "silencieux", "erreur", "avertir", "avis", "http", "timing", "info", "verbeux ", "idiot". Je suggérerais soit "erreur" (qui supprimerait les avertissements, mais afficherait les erreurs) ou "avertir" (qui inclurait les avertissements). Il n'y a normalement aucune raison pour que npm nous montre comment il décide quoi exécuter, ce qu'il fait par défaut. Cela ressemble à un texte de débogage.
John Deighan

OK, je dois me corriger et soulever une objection. C'est peut-être même un bogue node.js? Lorsque j'ai créé un fichier .npmrc avec 'loglevel = error', l'exécution de 'npm test' suivait toujours la logique de npm sur la façon dont il déterminait la ligne de commande à exécuter. Node version 8.12.0, npm version 5.8.0.
John Deighan

44

Vous devriez pouvoir utiliser à la fois les options --quietet --silent, comme dans

npm install --quiet

--quietaffichera stderr et avertissements, --silentdevrait supprimer presque tout

Vous pouvez également envoyer stdout / stderr vers /dev/null, comme ceci:

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

ou moins versbose

npm install &> /dev/null

7
Sous Windows, c'est npm install --quiet> NUL
Manohar Reddy Poreddy

4
Cette question concerne spécifiquement l'exécution des scripts npm .
hackel

7
npm install --quiet --no-progress 

Gardera les avertissements et les erreurs, et supprimera la barre de progression du TDAH sur les terminaux qui la prennent en charge.


3
Cette question concerne spécifiquement l'exécution des scripts npm .
hackel

1

Vous pouvez le faire dans votre script en supprimant les écouteurs d'événements

#!/usr/bin/env node

process.removeAllListeners('warning');

// Do your thang without triggering warnings
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.