Как подавить вывод при запуске скриптов npm

93

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

Есть ли хороший способ установить это глобально и есть ли способ установить его для каждого запуска скрипта?


источник
Проблема по этой теме находится по адресу: github.com/npm/npm/issues/6124
daotoad

Ответы:

159

Все скрипты:

Вы можете исправить это, подавив вывод 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 run myCmd - --deploy
arcseldon
4
Это действительно довольно абсурдно (не виню вас). Я не хочу добавлять || true; это не лучшее решение. Я не хочу отключать ВСЕ другие команды, использующие .npmrc. И запускать этот конкретный скрипт -sпостоянно, тоже кажется очень глупым. Кто-нибудь нашел лучшее решение для отключения звука одного скрипта?
PascalVKooten
На случай, если кто-то еще столкнется с этим, есть открытая проблема - см. Github.com/npm/npm/issues/8821 .
Ян Рутледж,
loglevel = silent мне кажется излишним. Это заглушит даже сообщения об ошибках (хотя они все равно будут записаны в локальный файл). Согласно ссылке вскоре после этого предложения, возможные уровни журнала в порядке приоритета следующие: «молчание», «ошибка», «предупреждение», «уведомление», «http», «время», «информация», «подробный». "," глупый ". Я бы предложил либо «ошибку» (которая подавляет предупреждения, но отображает ошибки), либо «предупреждать» (которая включает предупреждения). Обычно у npm нет причин показывать нам, как он решает, что запускать, что он и делает по умолчанию. Это похоже на отладочный текст.
Джон Дейган
Хорошо, мне нужно исправить себя и заявить возражение. Может, это вообще ошибка node.js? Когда я создал файл .npmrc с 'loglevel = error', запуск 'npm test' все еще отслеживал логику npm о том, как он определяет, какую командную строку запускать. Версия узла 8.12.0, версия npm 5.8.0.
Джон Дейган
44

Вы должны иметь возможность использовать параметры --quietи --silent, как в

npm install --quiet

--quietпокажет stderr и предупреждения, --silentдолжен подавить почти все

Вы также можете отправить stdout / stderr /dev/null, например:

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

или менее Versbose

npm install &> /dev/null
Александр Миллс
источник
7
В Windows это npm install --quiet> NUL
Manohar Reddy Poreddy
4
Этот вопрос касается запуска сценариев npm .
hackel
7
npm install --quiet --no-progress 

Сохраняет предупреждения и ошибки и подавляет индикатор выполнения ADHD на поддерживающих его терминалах.

Майкл Коул
источник
3
Этот вопрос касается запуска сценариев npm .
hackel
1

Вы можете сделать это внутри своего скрипта, удалив слушателей событий

#!/usr/bin/env node

process.removeAllListeners('warning');

// Do your thang without triggering warnings
ErisDS
источник