Могу ли я скрыть или замолчать "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, поэтому это не должно быть проблемой.
Конечно, это будет работать только в среде оболочки, которая поддерживает перенаправление вывода.