Як придушити вихід під час запуску сценаріїв npm


93

Я вирішив поекспериментувати зі сценаріями npm як інструментом побудови, і поки мені це подобається. Одне питання, яке я хотів би вирішити, - під час запуску сценарію для запуску jshint, коли щось не проходить підключення, я отримую тонну "npm ERR!" ліній. Я хотів би їх придушити, оскільки висновок з лінтера є більш значущим.

Чи є хороший спосіб встановити це глобально і чи є спосіб встановити це для кожного запуску сценарію?

node.js  npm 


Існує проблема з цією темою за адресою: github.com/npm/npm/issues/6124
daotoad

Відповіді:


160

Усі сценарії:

Ви можете це виправити, придушивши загальний результат npm, встановивши рівень журналу на silentкілька способів:

При кожному npm runвиклику:

npm run --silent <your-script>

Або глобально, створивши .npmrcфайл (цей файл може бути як у каталозі вашого проекту, так і у вашій домашній папці) із наступним:

loglevel=silent

Ресурси:

конфігурація рівня журналу npm: https://docs.npmjs.com/misc/config#loglevel

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

Кожен сценарій, окремо:

Простий трюк, який я використовував для того, щоб обійти цю проблему з певними сценаріями, як-от лінтування, - це додати || trueв кінці таких сценаріїв. Це буде працювати без будь-яких змін конфігурації npm.

Це забезпечить, щоб сценарій завжди виходив зі 0статусом. Це обманює npm, думаючи, що сценарій вдався, отже, приховуючи ERRповідомлення. Якщо ви хочете бути більш явним, ви можете додати додаток, || exit 0і він повинен досягти того самого результату.

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

|| true не працює, якщо ви намагаєтесь додати аргументи до кінця запуску npm - наприклад. npm запустити myCmd - --deploy
arcseldon

4
Це насправді досить абсурдно (не звинувачуючи вас). Я не хочу додавати || true; це не є гарним рішенням. Я не хочу мовчати ВСІ інші команди за допомогою .npmrc. І постійно запускати цей конкретний сценарій -sтеж здається дуже безглуздим. Хтось знайшов краще рішення для мовчання єдиного сценарію?
PascalVKooten

Якщо хтось ще стикається з цим, є відкрите питання - див. Github.com/npm/npm/issues/8821 .
Ian Routledge

loglevel = silent мені здається надмірним. Це мовчить навіть повідомлення про помилки (хоча вони все одно будуть записані в локальний файл). Згідно з посиланням незабаром після цієї пропозиції, можливими рівнями журналу в порядку пріоритету є: "тихий", "помилка", "попереджати", "повідомлення", "http", "хронометраж", "інформація", "детальний "," безглуздо ". Я б запропонував або "помилку" (яка буде придушувати попередження, але відображати помилки) або "попереджати" (що включатиме попередження). Зазвичай немає причин, щоб npm показував нам, як він вирішує, що запускати, що робить за замовчуванням. Це схоже на налагодження тексту.
John Deighan

Добре, мені потрібно виправитись і висловити заперечення. Можливо, це навіть помилка node.js? Коли я створив файл .npmrc з 'loglevel = error', запуск 'npm test' все ще простежувався через логіку npm про те, як він визначав, який командний рядок запускати. Версія вузла 8.12.0, версія npm 5.8.0.
John Deighan

44

Ви повинні мати можливість використовувати як параметри, так --quietі --silentопції, як у

npm install --quiet

--quietбуде показувати stderr та попередження, --silentповинен придушити майже все

Ви також можете надіслати stdout / stderr /dev/null, наприклад:

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

або менше вербозу

npm install &> /dev/null

7
У Windows це npm install --quiet> NUL
Manohar Reddy Poreddy

4
Це питання стосується запуску сценаріїв npm .
hackel

7
npm install --quiet --no-progress 

Зберігатиме попередження та помилки, а також пригнічуватиме показник розвитку СДУГ на терміналах, які його підтримують.


3
Це питання стосується запуску сценаріїв npm .
hackel

1

Ви можете зробити це всередині свого сценарію, видаливши прослуховувачі подій

#!/usr/bin/env node

process.removeAllListeners('warning');

// Do your thang without triggering warnings

0

для окремого сценарію, який ви хочете промовчати, не додаючи --silentкожного разу, ви можете створити новий сценарій, який викликає ваш попередній і додає --silent.

Мої приклади сценаріїв у package.json:

    "dev-loud": "npm run build && nodemon -r dotenv/config dist/index.js",
    "dev": "npm run dev-loud --silent"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.