Могу ли я скрыть или замолчать "npm ERR!" вывод при использовании npm run script?

Я использую npm run script для выполнения таких задач, как "сборка" и "тест".

Например, мой package.json выглядит следующим образом:

{
  "name": "fulfillment-service",
  "version": "1.0.0",
  "description": "Endpoint for CRUD operations on fulfillment status",
  "main": "src/server.js",
  "scripts": {
    "build": "tsc",
    "test": "tape tests/*.js"
  },
  "dependencies": {},
  "devDependencies": {
    "typescript": "^1.8.10"
  }
}

Когда я запустил npm run build, и он будет успешным, вывод будет следующим:

> [email protected] build d:\code\fulfillment-service
> tsc

Когда я запускаю npm run build и он терпит неудачу, вывод следующий:

> [email protected] build d:\code\fulfillment-service
> tsc
src/server.ts(51,81): error TS2339: Property 'connection' does not exist on type 'IncomingMessage'.
npm ERR! Windows_NT 10.0.10586
npm ERR! argv "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "run" "build"
npm ERR! node v6.2.1
npm ERR! npm  v3.9.3
npm ERR! code ELIFECYCLE
npm ERR! [email protected] build: `tsc`
npm ERR! Exit status 2
npm ERR! 
npm ERR! Failed at the [email protected] build script 'tsc'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the fulfillment-service package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     tsc
npm ERR! You can get information on how to open an issue for this project with:
npm ERR!     npm bugs fulfillment-service
npm ERR! Or if that isn't available, you can get their info via:
npm ERR!     npm owner ls fulfillment-service
npm ERR! There is likely additional logging output above.
npm ERR! Please include the following file with any support request:
npm ERR!     d:\code\fulfillment-service\npm-debug.log

Это заполняет всю консоль бесполезной информацией, и мне нужно прокручивать ее вверх, чтобы понять, почему она не удалась.

Нужно ли вообще скрывать/замораживать строки, начинающиеся с npm ERR! во время разработки?

Ответ 1

Вы должны использовать npm run build --silent.

Это не документировано в npm help, npm help run или что-то еще очевидное, но при некотором поиске в Интернете вы можете узнать, что очевидно он задокументирован в npm help 7 config. Вы также можете использовать опцию loglevel в .npmrc.

Параметр --silent (short: -s) подавляет:

  • Две строки, начинающиеся с >, говорят, какая команда вы используете.
  • npm ERR!.
  • Создание npm-debug.log, если есть ошибка.

Примечание. Использование сценариев npm для запуска других сценариев npm может потребовать использования --silent более одного раза. Пример package.json:

{
  . . .
  "scripts": {
    "compile": "tsc",
    "minify": "uglifyjs --some --options",
    "build": "npm run compile && npm run minify"
  }
}

Если вы делаете npm run build и TypeScript находит ошибку, вы получите npm ERR! из обоих сценариев. Чтобы подавить их, вы должны изменить конструкцию script на npm run compile --silent && npm run minify и запустить ее с помощью npm run build --silent.

Ответ 2

Существует проблема с npm: run-scripts слишком шумны при использовании в разработке # 8821 (также упоминается в комментарии выше )

В обсуждении этой проблемы несколько человек упомянули о создании псевдонима, например. npr (с использованием опции --silent gcampbell описывает в своем ответе). Хотя --silent может скрыть некоторые проблемы типа npm, такие как malformed package.json, на данный момент это похоже на разумное решение.

alias npr='npm run --silent $*'

Еще одна вещь из той дискуссии, которая может быть интересной, хотя это еще один инструмент, - это yarn, который описан на сообщение в блоге facebook.

Ответ 3

Если вы создали собственный скрипт и он возвращается с ошибкой NPM (даже если ошибки нет), добавьте process.exitCode = 0; в конце сценария, чтобы избежать ошибки.

Ответ 4

Как отмечали другие, проблема с --silent заключается в том, что вы теряете все. Другой способ, который, по-видимому, работает в большинстве случаев:

npm run something 2>/dev/null

Если один из исполняемых файлов, которые вы запускаете, записывается в stderr, то это будет подавлено. Но большинство материалов node записывает на stdout, поэтому это не должно быть проблемой.

Конечно, это будет работать только в среде оболочки, которая поддерживает перенаправление вывода.